Android 通知打开活动,按下后退按钮,主活动是否打开?
我能描述我的问题的最好方式是:Android 通知打开活动,按下后退按钮,主活动是否打开?,android,notifications,android-intent,back-button,android-pendingintent,Android,Notifications,Android Intent,Back Button,Android Pendingintent,我能描述我的问题的最好方式是: public void createNotification(int notifyId, int iconId, String contentTitle, String contentText) { Intent intent = new Intent(mContext, NewNoteActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExt
public void createNotification(int notifyId, int iconId, String contentTitle, String contentText) {
Intent intent = new Intent(mContext, NewNoteActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(AgendaNotesAdapter.KEY_ROW_ID, (long)notifyId);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, notifyId, intent, 0);
Notification notification = new Notification(iconId, contentTitle, 0);
notification.setLatestEventInfo(mContext, contentTitle, contentText, contentIntent);
mNotificationManager.notify(notifyId, notification);
广播接收器
)public void createNotification(int notifyId, int iconId, String contentTitle, String contentText) {
Intent intent = new Intent(mContext, NewNoteActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(AgendaNotesAdapter.KEY_ROW_ID, (long)notifyId);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, notifyId, intent, 0);
Notification notification = new Notification(iconId, contentTitle, 0);
notification.setLatestEventInfo(mContext, contentTitle, contentText, contentIntent);
mNotificationManager.notify(notifyId, notification);
我试图在
intent
中添加更多的标志组合,但它们都没有解决我的问题。。。建议?我从您的问题中了解到,您的问题在以下步骤中
1.启动完成后创建通知
2.主要活动将要求启动
3.您按下主页按钮,主要活动将停止,但不会破坏
4.单击状态栏上的通知,您的应用程序将恢复
,这样您的后台堆栈中已经有了主要活动,通知将创建新活动,如您在问题中所述NewNoteActivity活动将被推到后台堆栈上。因此,在这一步中,您有两个活动在后台堆栈中堆栈
5.您按下后退按钮后,最后一个活动将被销毁
,您的主要活动将恢复
,但您想进入主页屏幕
因此,我从你的问题中了解到,你的问题在于以下步骤
1.启动完成后创建通知
2.主要活动将要求启动
3.您按下主页按钮,主要活动将停止,但不会破坏
4.单击状态栏上的通知,您的应用程序将恢复
,这样您的后台堆栈中已经有了主要活动,通知将创建新活动,如您在问题中所述NewNoteActivity活动将被推到后台堆栈上。因此,在这一步中,您有两个活动在后台堆栈中堆栈
5.您按下后退按钮后,最后一个活动将被销毁
,您的主要活动将恢复
,但当您在NewNoteActivity活动中按下后退按钮时,您希望打开主页活动
因此,解决方案是,当您在NewNoteActivityactivity中按下back按钮时,您可以使用意图再次启动主活动。FLAG\u activity\u CLEAR\u TOP
标志,这样您的主活动将重新创建并接收onNewIntent()
方法,这样您就可以获得标志并完成主活动
例如
@Override
public void onBackPressed() {
Intent i = new Intent(this, Main.class);
i.putExtra("exit", true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
super.onBackPressed();
}
现在,您必须在主要活动中实现onNewIntent()
方法
在NewNoteActivity活动中按下后退按钮时,您的主活动将调用onNewIntent()
方法,因此在该方法中,您必须获取从NewNoteActivity活动传递的标志变量。如果您获取标志且该标志为真,则只需完成主活动即可进入主屏幕
编辑
你是说你有来自A,B的任何活动,或者打开C并按下后退按钮,此活动将被关闭。如果此时堆栈中只有一个活动,则应用程序将被关闭,这意味着您将进入主屏幕。但如果您有多个活动并按下后退按钮,则堆栈中至少有一个活动,现在单击通知,以便将打开与通知关联的新活动,以便将此活动推送到后堆栈上的活动上。现在,如果您按下“后退”按钮,则如果您尚未修改OnBackpress(),则与通知关联的最后一个活动将关闭方法,然后它将检查后堆栈中是否有任何活动,以便恢复活动,或者如果后堆栈中没有活动,则您的应用程序将关闭,您将看到主屏幕出现相同的问题。
对我有效的方法是在清单中为通知启动的活动设置以下属性:
android:taskafinity=“”
这从本质上分离了通知活动与主活动的关联性,因此操作系统不觉得需要“返回”到主活动,而只是返回到之前的任何活动,例如“桌面”。谁还需要答案。看起来这就是您想要实现的目标: 从通知启动
活动时,必须保留用户预期的导航体验。单击“上一步”应使用户通过应用程序的正常工作流程返回主屏幕,单击“最近”应将活动显示为单独的任务
你的情况是-
请参阅链接中的完整步骤。基本上你需要:
1.在AndroidManifest.xml中定义活动层次结构
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ResultActivity"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
它对我有用。试试这个:
notifyIntent.setAction(Intent.ACTION\u MAIN);
notifyIntent.addCategory(Intent.CATEGORY_启动器);
我在应用程序中使用此解决方案。
覆盖onBackPressed(在从通知路由的活动中),并检查应用程序是否在堆栈中。如果没有,那么开始您的根活动。用户始终可以从根活动导航。这就是我在应用程序中所做的
@Override
public void onBackPressed() {
if (isTaskRoot()) {
Intent intent = new Intent(this,YourMainActivity.class);
startActivity(intent);
super.onBackPressed();
}else {
super.onBackPressed();
}
}
差不多。。。问题是,我没有主页活动,你误解了我。我的意思是我想回到主屏幕,