0

我想註冊兩個接收器,一個會通過GCM從我的應用服務器接收消息,另一個會從我的服務器加載消息。以編程方式註冊在Android的接收器和服務

這一切都在一個叫做活動ChatActivity

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     d("Broadcast received FROM MMESSAGERECEIVER"); 
     Toast.makeText(context, "mMessageReceiver started", Toast.LENGTH_LONG).show(); 
     if(cust != null && adapter != null){ 
      SharedPreferences sharedPref = ChatActivity.this.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); 
      long userID = sharedPref.getLong(AllSystems.PREFERENCES_KEY_LOGGED_IN_USER_ID, -1); 
      // Extract data included in the Intent 
      String message = intent.getStringExtra("message"); 
      String dateCreated = intent.getStringExtra("dateCreated"); 
      Date d = new Date(Long.parseLong(dateCreated)); 
      long senderId = Long.parseLong(intent.getStringExtra("senderId")); 
      Toast.makeText(context, "mMessageReceiver in the first if", Toast.LENGTH_LONG).show(); 
      if(senderId == userID || senderId == cust.getId()){ 
       Toast.makeText(context, "mMessageReceiver in the second if", Toast.LENGTH_LONG).show(); 
       adapter.add(new ChatMessageData(senderId == cust.getId(), message, new DateTime(d))); 
       Bundle results = getResultExtras(true); 
       results.putBoolean(INTERCEPTED, true); 
       playSound(); 
      } 
     } 
    } 
}; 

private BroadcastReceiver mLoadedReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     d("Broadcast received"); 
     d("Conversation loaded broadcast received"); 
     if(task != null && cust != null){ 
      d("Contact and task not null"); 
      long contactId = intent.getLongExtra("contactId", -1); 
      if(contactId == cust.getId()){ 
       d("Executing conversation loading task"); 
        task.execute(); 
      } 
     } 
    } 
}; 

private void playSound(){ 
    try { 
     Uri notification = Uri.parse("android.resource://com.me.myapp/" + R.raw.notif); 
     Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
     r.play(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 


@Override 
protected void onResume() { 
    super.onResume(); 
    registerReceiver(mMessageReceiver, new IntentFilter("com.google.android.c2dm.intent.RECEIVE")); 
    LocalBroadcastManager.getInstance(this).registerReceiver(mLoadedReceiver, loadedFilter); 
} 


//Must unregister onPause() 
@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(mMessageReceiver); 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mLoadedReceiver); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chats); 

    LocalBroadcastManager.getInstance(this).registerReceiver(mLoadedReceiver, loadedFilter); 

    registerReceiver(mMessageReceiver,new IntentFilter("com.google.android.c2dm.intent.RECEIVE")); 

} 

問題

廣播實例mMessageReceiver(1號線),因爲對話框(麪包)沒有被註冊,都應該在其onReceive方法中未被激活。這個實例應該收到GCM消息,說明爲什麼我已經像這樣註冊了它[registerReceiver(mMessageReceiver,new IntentFilter(「com.google.android.c2dm.intent.RECEIVE」));

問題

我在哪裏的問題呢?我試圖按照Try Cloud Messaging for Android甚至example at gitlab,但都是徒勞的。我以前的問題關係到這個問題是here

+0

您是否在Manifest文件中聲明瞭接收器? –

+0

@VINILSATRASALA我已經在ChatActivity.java中以編程方式聲明瞭它。我需要在Manifest文件中做到這一點嗎? –

回答

0

您需要在清單中聲明一些權限,服務和GCMReceiver以使GCM按預期工作。

官方文檔中的不同頁面地址更加深入地設置在Android客戶端上的GCM。 (請參考here和樣本here

希望這對我有所幫助。

+0

這是我的後端實現問題。當我第一次在設備上安裝我的應用程序時,我能夠很好地接收gcm通知。但是當我安裝第二個tyme時,那是當我沒有收到通知。但我解決了這個問題。感謝你的關心。 –