PendingIntent来自通知和应用程序历史记录冲突

时间:2010-03-29 23:13:15

标签: android

我正在创建一个类似于以下内容的通知:

    Intent ni = new Intent(this, SomeActivity.class);
    ni.putExtra("somestring", "somedata");
    PendingIntent contentIntent = 
        PendingIntent.getActivity(this, 0, ni, 
                PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT);
    Context context = getApplicationContext();

    notification.setLatestEventInfo(context, 
            res.getString(R.string.app_name), 
            text, contentIntent);

此处的关键是通知的Intent上的额外数据。一旦我点击通知并显示SomeActivity,它就会显示活动,并且可以获得额外的数据。

但是,如果我退出应用程序,按住主页按钮直到最近的活动列表出现,并选择再次打开应用程序,仍然会传递额外的数据。如果应用程序是通过通知打开的,而不是来自最近的活动列表,我是否可以通过传递此数据?

3 个答案:

答案 0 :(得分:2)

看起来我可以查看是否从最近的活动对话框启动了活动:

if((getIntent().getFlags() & 
        Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // ignore extras
}
else {
    // do not ignore extras
}

我不知道这是不是最好的方式,但确实有效。

答案 1 :(得分:1)

使用其他Intent。例如,您可以为某些自定义操作字符串添加<intent-filter>,并将其用于基于Notification的{​​{1}}。换句话说,您无法更改最近的活动对话框,但您可以改变冲突的一面。

答案 2 :(得分:1)

尝试:

int NOTIFICATION_CODE = 1;

PendingIntent contentIntent = 
          PendingIntent.getActivity(this, 
                                    NOTIFICATION_CODE, 
                                    ni,
                                    PendingIntent.FLAG_UPDATE_CURRENT | 
                                    PendingIntent.FLAG_ONE_SHOT
                                   );

更改每个通知的NOTIFICATION_CODE值。