将通知ID发送到每个通知的活动

时间:2015-10-12 10:17:59

标签: android android-intent android-notifications

我现在感到非常困惑,我一直在阅读几个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。

我的未决意图一定存在问题吗?

2 个答案:

答案 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);