【发布时间】:2021-09-27 18:56:31
【问题描述】:
我的应用程序中有一个Activity(称为 MainActivity),当我向用户发送通知时,我希望在单击通知时打开它。 重要的是要避免重新创建活动,如果已经有一个活动实例,请将其放在前面并将数据传递给它。为了获得这种行为,我已经尝试过:
Intent intent = new Intent(getApplicationContext(), MainActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
.putExtra("data", ...);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
在清单中:
<activity
android:name="...activities.MainActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen.Light">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
activity>
但是当我触摸通知时不会调用onNewIntent(Intent intent) 方法,而是调用onCreate 并重新创建活动。请注意,由于我正在测试,我从 MainActivity 本身发送通知,当它打开时,我拖动状态栏并单击我的通知(然后重新创建 MainActivity)。有什么问题?
【问题讨论】:
-
能否请您发布您的
new Intent实施sn-p ?你在哪里定义PendingIntent? -
您的代码按预期运行,如果您仍然遇到问题,请分享更多详细信息以进行调试并帮助您解决问题:)
-
@RaguSwaminathan 我只是重写
OnNewIntent以查看它是否被调用:protected void onNewIntent(Intent intent) {super.onNewIntent(intent); setIntent(intent); Log.i(TAG, "hello!"); -
正如我在问题中提到的,我是从 MainActivity 本身运行这段代码,所以 PendingIntent 也在那里创建。
-
我可以按预期工作。如果需要,我可以发布我的答案以供您理解。
标签: android android-intent android-activity android-notifications