我将此Activity
称为Posting
:
<activity
android:name="Posting"
android:label="@string/app_name"
android:launchMode="singleTop"
android:uiOptions="splitActionBarWhenNarrow">
<intent-filter>
<action android:name="com.emergency.StopDistributing"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="com.emergency.nothingMuch"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
我正在使用操作com.emergency.nothingMuch
导航到此特定活动。如以下代码所示:
i = new Intent("com.emergency.nothingMuch");
startActivity(i);
现在在Posting
类中我有一个Button
,当它被点击时,它应该绑定到一个服务并从中获取数据并执行一些任务。此外,通知还会显示通过单击通知,活动将取消绑定服务并执行其他任务。
通知对此PendingIntent
课程有Posting
但行动不同。以下代码是:
Intent iStop = new Intent("com.emergency.StopDistributing");
PendingIntent stopTrackingPI = PendingIntent.getActivity(this, 1, iStop, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addAction(android.R.drawable.ic_media_pause, "Stop Tracking", stopTrackingPI);
现在在onResume
我有一个if语句来检查Intent Action。
if(getIntent().getAction().equals("com.emergency.StopDistributing")) {
stopPosting();
}
在if语句之前添加Log.d
之后。当我按下通知动作时。我得到的意图行动仍然是nothingMuch
。它没有变为com.emergency.StopDistributing
。
我还将android:launchMode="singleTop"
用于此活动,因为我想修改现有活动而不是打开新活动。
那么为什么在点击通知时Intent的操作不会改变,我该如何修复它。提前致谢。
P.S:我不想使用setIntent(iStop);改变它因为我有其他PendingIntent
所以我需要另一个解决方案。
答案 0 :(得分:2)
尝试在Activity中使用onNewIntent()方法来检查Intent的操作,而不是使用getIntent(),它仍会返回原始意图。
这是为在其包中将launchMode设置为“singleTop”的活动,或者在调用startActivity(Intent)时客户端使用FLAG_ACTIVITY_SINGLE_TOP标志而调用的。在任何一种情况下,当在活动堆栈的顶部而不是正在启动的活动的新实例重新启动活动时,将在现有实例上使用用于重新启动的Intent调用onNewIntent()它
在收到新意图之前,活动将始终暂停,所以 你可以指望在这个方法之后调用onResume()。
请注意,getIntent()仍然会返回原始的Intent。您可以使用 setIntent(Intent)将它更新为这个新的Intent。