簡體   English   中英

BroadcastReceiver onReceive用於聊天功能

[英]BroadcastReceiver onReceive for chat function

我正在嘗試使用android studio設置聊天功能,但是收到消息后聊天屏幕沒有更新。

loadMsg(); 發送信息時功能正在工作。 但是收貨時沒有。

這是我的代碼:

@Override
public void onStart() {
    super.onStart();
    IntentFilter ief = new IntentFilter("test");
    registerReceiver(mReceiver, ief);
}

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      //  Show("Intent Receved");
        if (intent.getAction().equals("test")) {
            // Do stuff
            loadMsg();
        }
    }
};

public void loadMsg()
{
    ParseUser par=room.getParseUser("unreadBy");
    try{
        par.fetchIfNeeded();
        currentUser.fetchIfNeeded();
    }catch (Exception e){}
    if(par!=null)
    {
        if(par.getObjectId().equals(currentUser.getObjectId()))
        {
            room.put("unread",0);
            room.saveInBackground(null);
        }
    }

    final ParseQuery<ParseObject> msgQ=new ParseQuery("Messages");
    msgQ.whereEqualTo("match",room);
    msgQ.orderByAscending("createdAt");
    msgQ.setLimit(500);
    msgQ.include("user");
    msgQ.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            if(e==null) {
                Log.d(tag, "Messges--" + objects.size());
                msgObj = objects;
                if(msgObj.size()>0) {
                    empty.setVisibility(View.INVISIBLE);
                    try {
                        adapter = new AwesomeAdapter(getApplicationContext(), msgObj, currentUser, selfbit, incbit);
                        lv.setAdapter(adapter);
                        lv.setSelection(msgObj.size() - 1);
                    }catch (Exception eg){}
                }

            }else{
                Log.d(tag, "eror--" + e);
            }
        }
    });
}

Manifest.xml

<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />                  <permission android:protectionLevel="signature"   android:name="com.package.name.permission.C2D_MESSAGE" />
<uses-permission android:name="com.package.name.permission.C2D_MESSAGE" />

    <receiver android:name="com.parse.ParseBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.RECEIVE_BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>

   <receiver android:name=".Supported.MyReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="com.package.name.UPDATE_STATUS" />
        </intent-filter>
    </receiver>

    <receiver android:name="com.parse.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <!--
              IMPORTANT: Change "com.example.app" to match your app's package name.
            -->
            <category android:name="com.package.name" />
        </intent-filter>
    </receiver>

知道我在做什么錯嗎?

嘗試改變

    if (intent.getAction().equals("test")) {
        // Do stuff
        loadMsg();
    }

    if (intent.getAction().equals("test")) {
        // Do stuff
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                loadMsg();
            }
        });
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM