当活动调用finish()时,通知pendingIntent contentIntent失败

bra*_*all 10 java android

我有一个前台服务通知,点击后应该开始一个活动.这个活动在调用finish()之前很短暂.

第一次单击通知时,它会工作,第二次,然后我收到错误:

    Sending contentIntent failed: android.app.PendingIntent$CanceledException
Run Code Online (Sandbox Code Playgroud)

在创建前台服务通知的代码中,我将randomActivity.class更改为另一个不调用finish的Activity类,它在每次单击时都能正常工作.从:

    Intent notificationIntent = new Intent(this, RandomActivity.class);
Run Code Online (Sandbox Code Playgroud)

至:

    Intent notificationIntent = new Intent(this, HomeActivity.class);
Run Code Online (Sandbox Code Playgroud)

工作良好...

我使用了Android开发者网站上的标准通知代码,并使用"通知"构建器对其进行了测试.无论如何我得到相同的结果.它完美地工作,除非Activity调用finish();

这是预期的行为,一个错误,还是我错过了什么?

我提前感谢你的帮助,希望能有一个解决方案!

注意:我使用的通知代码是完全标准的,所以我没有发布它.RandomActivity调用finish(); 在onCreate,所以也没有什么不寻常的.

bra*_*all 12

在尝试了我可能做的一切之后,我终于找到了解决方案.如果有人发现这个问题也会发布.

我必须将int requestCode与通知ID匹配.为什么?绝对不知道......我只能假设它会阻止意图数据变为空或重用它?

    private static int ONGOING_NOTIFICATION_ID = 76;

    PendingIntent contentIntent = PendingIntent.getActivity(this,
    ONGOING_NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)

与startForeground的通知ID相同:

    this.startForeground(ONGOING_NOTIFICATION_ID, not);
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


Sre*_*i J 5

我不需要检查通知ID(如您建议的那样),但是我确实必须将标志更改为FLAG_UPDATE_CURRENT,而不是FLAG_ONE_SHOT

使用FLAG_ONE_SHOT,待提交的意图一旦被发送就被取消,然后,没有任何轻敲通知将允许再次发送相同的待处理意图,因此是例外。

这是我的问题。