>在引导时创建通知(使用BroadcastReceiver).
>我的应用程序主要活动已打开,按下主页按钮(应用程序仍在后台运行,直到系统关闭它).
>我按下状态栏并按下之前在启动时创建的通知.
>启动了一些与主要活动不同的活动.
>我按后退按钮,显示主要活动.
我该如何防止最后一步?我想要的后退按钮是回到原来的位置,这是主屏幕(包含所有小部件和应用程序图标的桌面).我的应用程序的主要活动应该是在后台运行,为什么用后退按钮调用?
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,contentText,contentIntent); mNotificationManager.notify(notifyId,notification);
解决方法
1.启动完成后创建通知
2.主要活动将召唤启动
3.按下主页按钮,主要活动将停止,但不会破坏
4.您点击状态栏中的通知,这样您的应用程序将恢复,以便您已经在后台堆栈中进行了主要活动,并且通知将创建您在问题中提到的新活动NewNoteActivity活动将推回到堆栈.SO在此处步骤你在后台堆栈中有两个活动
5.你按下后退按钮,以便最后的活动将被破坏,你的主要活动将恢复但是你想要去主页屏幕.
因此,根据您的问题,您的问题是按照以下步骤进行的
1.启动完成后创建通知
2.主要活动将召唤启动
3.按下主页按钮,并且通知将创建您在问题中提到的新活动NewNoteActivity活动将推回到堆栈.SO在此处步骤你在后台堆栈中有两个活动
5.您按下后退按钮,以便最后一个活动将被破坏,您的主要活动将恢复.但是当您按下NewNoteActivity活动的后退按钮时,您想要打开主页活动.
因此,解决方案是,当您从NewNoteActivityactivity按下后退按钮时,您将使用Intent.FLAG_ACTIVITY_CLEAR_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(); }
现在,您必须在Main活动中实现onNewIntent()方法
在从NewNoteActivity活动按下的后退按钮上,您的Main活动将调用onNewIntent()方法,因此在此方法中您必须获取从NewNoteActivity活动传递的标志变量.如果您获得标志并且如果它是真的那么只需完成主活动,以便你会得到主屏幕.
编辑
您说您已打开A,B或C中的任何活动并按下后退按钮以关闭此活动.如果此时您只有一个活动,那么您的应用程序将被关闭意味着您将获得主屏幕.但是,如果您有多个活动而按下后退按钮,您至少有一个活动在堆栈中,现在您点击通知,这样就会打开与您的通知相关联的新活动,以便此活动将是如果您按下后退按钮,如果您没有在该活动中修改onBackPressed()方法,那么如果您在后面的堆栈中有任何活动,它将会关闭堆栈这样活动就会恢复,或者如果后面的堆栈中没有任何活动,那么你的应用程序将被关闭,你将进入主屏幕