【发布时间】:2016-12-31 08:06:46
【问题描述】:
我正在使用 GCM,但我面临一个问题,即当我收到通知时,我从 onResume() 注册了我的 BroadcastReceiver,但有时我的 onResume() 函数调用了 2 次,因此我遇到了问题.我不明白为什么这工作了 2 次。
gcm Intent 服务类代码:
if (!extras.isEmpty()) {
if (GoogleCloudMessaging.
MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
sendNotification(this, msgg);
} else if (GoogleCloudMessaging.
MESSAGE_TYPE_DELETED.equals(messageType)) {
sendNotification(this, msgg);
updateMyActivity(this, msgg);
bundle.putString("result", msgg);
receiver.send(STATUS_FINISHED, bundle);
} else if (GoogleCloudMessaging.
MESSAGE_TYPE_MESSAGE.equals(messageType)) {
updateMyActivity(this,msgg);
sendNotification(this, msgg);
}
}
// GcmBroadcastReceiver.completeWakefulIntent(intent);
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
//This function will create an intent. This intent must take as parameter the "unique_name" that you registered your activity with
static void updateMyActivity(Context context, String message) {
Log.e(TAG, "updateMyActivity: " );
Intent intent = new Intent("unique_name");
//put whatever data you want to send, if any
intent.putExtra("message", message);
//send broadcast
context.sendBroadcast(intent);
}
onResume()活动方法:
@Override
public void onStart()
{
super.onStart();
onResume();
}
@Override
public void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter(
"unique_name");
mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//extract our message from intent
String msg_for_me = intent.getStringExtra("message");
}
但我有 2 次“msg_for_me”。检查屏幕截图。 http://prntscr.com/dpzxrs
【问题讨论】:
-
为什么在onStart中调用onResume?
-
因为如果我不调用它,那么我的简历功能不会一直有效@2ndGAB
-
“不工作”是什么意思,它不能完成工作或没有被调用。另一件事,是复制/粘贴错误还是您的广播接收器在 onResume() 中?你最好把它放在 onCreate() 然后 registerReceiver() 调用和 unRegisterReceiver() 在 on Destroy()
标签: android push-notification broadcastreceiver