我刚加了 PendingIntent.FLAG_UPDATE_CURRENT 标记到我的待定意图,它开始为我工作(跳过Intent的所有标志)。
PendingIntent.FLAG_UPDATE_CURRENT
示例代码:
PendingIntent pendIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
您可以通过以下方式发送额外内容
PendingIntent contentIntent ; Intent intent = new Intent(this,TestActivity.class); intent.putExtra("extra","Test"); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(ArticleDetailedActivity.class); contentIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
要在Test Activity类中获取Intent额外值,您需要编写以下代码:
Intent intent = getIntent(); String extra = intent.getStringExtra("extra") ;
如果不需要那么 的 避免 强> 将您在清单中的活动设置为单个任务。如果可以,请省略此行或将其更改为singleTop:
android:launchMode="singleTask��
如果您必须有一个任务,那么在待处理的意图设置标志中: 意图。 的 FLAG_ACTIVITY_NEW_TASK 强> |意图。 的 FLAG_ACTIVITY_CLEAR_TASK 强> 和PendingIntent。 的 FLAG_CANCEL_CURRENT 强> 。
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK); pIntent = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_CANCEL_CURRENT );
如果您有一个任务 - 在onNewIntent()中的活动中重置您的额外内容 的 setIntent(意向); 强>
protected void onNewIntent(Intent intent) { setIntent(intent); ... }
我用过这样的东西
Intent myIntent = new Intent(context, DoSomething.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, myIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
看看完整的例子 这里
设置 FLAG_ACTIVITY_NEW_TASK 对于通知Intent将导致以下内容:
FLAG_ACTIVITY_NEW_TASK
如果活动是 的 不 强> 已经在任务中运行,将启动一个新任务,并将Intent传递给该活动 onCreate()
onCreate()
但是,如果活动已在任务中运行,则该任务将被带到前台。就这样。意图会 的 不 强> 交付和 onNewIntent() 不会被叫。
onNewIntent()
如果你想要意图 的 实际上是交付 强> 你需要指定:
start_test.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
它使 的 没有不同 强> 是否 launchMode 活动是 singleTop 或不,你仍然必须指定 Intent.FLAG_ACTIVITY_SINGLE_TOP 在意图中。
launchMode
singleTop
Intent.FLAG_ACTIVITY_SINGLE_TOP
的 注意: 强> 如果活动已在任务中运行且活动已在 的 不 强> 在该任务的活动堆栈之上,任务将被带到前台。就这样。意图会 的 不 强> 交付。实现这一目标的唯一方法是添加 Intent.FLAG_ACTIVITY_CLEAR_TOP 到其他2个标志,但这可能不是你想要发生的事情(取决于你的具体情况)。
Intent.FLAG_ACTIVITY_CLEAR_TOP
在Google代码中查看我(尚未)公开的问题 http://code.google.com/p/android/issues/detail?id=17137
更简单的方法:真正的问题是,对同一目标的Intent会被替换。我刚刚创建了一个新服务“NotificationDismissalService”来解决这个问题。进入该服务的唯一目的是setDeleteIntent项。因为它是一项独特的服务,所以参数不会被替换。 NotificationDismissalService的主体(并且它实际上是每个唯一意图类型的一个这样的解雇服务)是“onStartCommand”的简单实现,其向优选服务发送意图(读取/写入正确的参数)。因为这是一个服务的实际发送,中间没有pendingintent,它工作得很好。