在android应用中,我说2个活动-MainActivity和OtherActivity。当我在OtherActivity中按向后箭头时,它又回到MainActivity,这工作正常。这是OtherActivity中代码的一部分:
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
但是当我发送通知时,单击通知窗口后,OtherActivity将打开-可以,可以。这是由通知中的以下代码引起的:
private void sendNotification(String title, String body) {
Intent i = new Intent(this, OtherActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pi = PendingIntent.getActivity(this,
0 /* Request code */,
i,
PendingIntent.FLAG_ONE_SHOT);
}
这很好用,但是现在如果我按下OtherActivity上的后退箭头,它将退出应用程序,而不会进入MainActivity。
我已经在清单文件中为OtherActivity设置了父项,所以我不确定为什么不将其转到MainActivity:
<activity
android:name=".OtherActivity"
android:label="OtherActivity"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme" />
答案 0 :(得分:1)
“后退”按钮的工作方式是重新启动上一个活动,如果从通知中打开应用程序后按回退,则代码会跳过主要活动,这使得正常情况下您单击该应用程序即会关闭返回,处理此问题的方法将需要首先进行一些工作,但随后在其他任何步骤或通知处理中都将为您带来魅力。
您需要做的是创建一个处理应用程序启动的层,例如Splash Screen > Authentication > MainActivity > any other Activity (or stop at Main if first time launching and not from notification)
,这样,当用户单击通知时,请勿将其重定向到{{1} },例如,重定向到OtherActivity
,然后让应用启动器执行之前的所有步骤,以到达您的AppLauncher
,然后再到达MainActivity
,如果用户单击从OtherActivity
或OtherActivity
等返回,他将在从通知中打开应用后按回退后将始终返回OtherActivity2
。
关于为MainActivity
设置新的Intent以重新打开MainActivity,这是一个糟糕的解决方案,因为您正在为已打开的onBackPressed
创建新的Instance
,并且将巨大的数据泄漏和性能问题,如果您在这种情况下继续在“主要活动”和“其他活动”之间来回重定向,您会注意到该应用的运行速度变慢,直到终止为止。
答案 1 :(得分:0)
好的,我想终于找到了答案。在我的Sendnotification方法中,我使用以下方法:
Intent backIntent = new Intent(this, MainActivity.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent notificationIntent = new Intent(this, OtherActivity.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
final PendingIntent pi = PendingIntent.getActivities(this, 1,
new Intent[] {backIntent, notificationIntent}, PendingIntent.FLAG_ONE_SHOT);
现在这可以按预期工作。