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时,那是当我没有收到通知。但我解决了这个问题。感谢你的关心。 –

相关问题