我现在感到非常困惑,我一直在阅读几个SE示例,他们似乎都做了一些略有不同的事情。
我想做什么:是否有一个名为NotificationActivity
的活动,当我点击通知时,它必须打开该活动,并为活动提供DeviceId
。我不想覆盖或更新任何待处理的活动。每项活动都应该是它自己的意图。
只应该有一次NotificationActivity
的实例。
这是我到目前为止的代码:
MyGcmListenerService:
Intent intent = new Intent(this, NotificationActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
//ADD My Extras
intent.putExtra(CommonBundleAttributes.CONNECTING_ACTIVITY_DEVICE_ID, content.DeviceId);
intent.putExtra(CommonBundleAttributes.CONNECTING_ACTIVITY_DEVICE_TYPE_ID, content.DeviceTypeId);
intent.putExtra(CommonBundleAttributes.CONNECTING_ACTIVITY_DEVICE_NAME, content.DeviceName);
//
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(content.DeviceName)
.setContentText("Notification")
.setAutoCancel(true)
.setSound(ingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setGroup("Mi:" + content.DeviceId)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NotificationID++, notificationBuilder.build());
和我的NotificationActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification);
deviceId = getIntent().getExtras().getLong(CommonBundleAttributes.CONNECTING_ACTIVITY_DEVICE_ID, -1);
deviceName = getIntent().getExtras().getString(CommonBundleAttributes.CONNECTING_ACTIVITY_DEVICE_NAME, "");
deviceTypeId = getIntent().getExtras().getInt(CommonBundleAttributes.CONNECTING_ACTIVITY_DEVICE_TYPE_ID, 0);
我在这里缺少什么/我认为我混淆了所有不同的旗帜和发射器类型。
如果内存中已有NotificationActivty
,我想关闭它并打开一个具有最新意图的新内容。如果用户手机上有3个通知,则他们会点击这三个通知。它必须为最后点击的通知打开NotificationActivty。
我的未决意图一定存在问题吗?
答案 0 :(得分:1)
在NotificationActivity中,您使用以下代码收集int或long值,即
notificationID = getIntent().getExtras().getInt(CommonBundleAttributes.CONNECTING_ACTIVITY_NOTIFICATIONID, 0);
然后请用putExtra()传递一个正确的值,即如果收集int则传递Integer.parseInt(content.DeviceId)
或收集long然后传递Long.parseLong(content.DeviceId)
希望它对你有所帮助
答案 1 :(得分:0)
在通知类中添加此行
intent.putExtra(CommonBundleAttributes.CONNECTING_ACTIVITY_NOTIFICATIONID, NotificationID);
在NotificationActivity中
notificationID = getIntent().getExtras().getInt(CommonBundleAttributes.CONNECTING_ACTIVITY_NOTIFICATIONID, 0);