2015-12-15 48 views
0

我試圖建立與Android工作室聊天功能,但在收到消息時聊天屏幕不更新。廣播接收器的onReceive聊天功能

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> 

任何想法,我做錯了嗎?

+0

確保註冊/中的onResume /註銷的onPause相應地reciever。如果你希望允許當應用程序被終止reciever得到更新註冊reciever在AndroidManifest –

+0

或許表明我們的代碼,你發送廣播? –

回答

0

嘗試改變

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

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

我都試過,但仍然沒有工作。 –