我想在从通知启动应用程序时打开正确的屏幕。我发现了一个场景,当它没有像我想象的那样工作时。
因此,这是它正常工作的第一个场景:
- 应用程序从启动器图标启动
- 应用程序已置于后台
- 显示商品信息处理通知
- 单击它时
onNewIntent
将调用默认活动。
但是,当应用程序首次从FCM通知启动时,则步骤4。 永远不会发生:
- 显示商品信息处理通知
- 应用从 FCM 通知启动
- 应用程序已置于后台
- 显示另一条商品信息处理通知
- 单击它时
onNewIntent
默认活动不被调用
我发现使用和编码确实存在问题。这是一个错误还是我只是错过了什么?
编辑:默认活动launchMode
设置为在清单文件中singleTask
。
参考前面的答案,onNewIntent 被调用用于将 launchMode 设置为 "singleTop" 的活动。
因此,您应该设置的第一件事是清单文件。将活动的启动模式设置为单顶。另一件事是添加带有操作标记的意图过滤器。
样本:
<activity android:name="youPackage.YourActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="youPackage.ACTION">
</intent-filter>
</activity>
而且,在您的服务中,只要您在意图过滤器中定义的操作,您就可以调用新意图。
样本:
Intent i = new Intent("youPackage.ACTION");
参考:
- https://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.content.Intent(
- https://developer.android.com/guide/topics/manifest/action-element.html
确保在启动器活动中覆盖 onNewIntent。就我而言,它是启动画面。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent.getExtras() != null) {
for (String key : intent.getExtras().keySet()) {
Object value = intent.getExtras().get(key);
Log.d("data ", "Key: " + key + " Value: " + value);
}
}
}