通知恢复活动

我知道,这种types有几个问题,但我尝试了所有这一切,但仍然无法正常工作。
好的,为我的应用程序; 我有一个活动。 在这个活动中,有4个标签,第四个标签包含一个列表和一个loggingbutton。 当我推动logging时,有一个GPS侦听器启动。 获得新的gps值后,将其推入列表中。
这工作到目前为止!
如果我点击主页button,它仍然有效,如果我长按它。 它恢复该活动打开特定的标签,列表仍然保持listitems和GPS侦听器仍然是活跃的。
这工作也很好!
现在我想添加一个通知,它显示列表的gps值为.number。 在每个新的GPS信号上,它都会用新的号码更新通知图标。 这是没有问题的,但点击通知的行动完全搞砸了我的应用程序。

实际的代码如下所示:

public void callNotify(String text) { notif = new Notification(); Intent contentIntent = new Intent(this, tabactivity.class); contentIntent.putExtra("fid", this.specialvalue); contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); notif.icon = R.drawable.icon; notif.setLatestEventInfo(this, getString(R.string.app_name), text, PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT)); notif.ledARGB = Color.RED; notif.ledOnMS = 200; notif.ledOffMS = 200; notif.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_ONGOING_EVENT | Notification.FLAG_ONLY_ALERT_ONCE; notif.number = notifyNumber; mNotificationManager.notify(notifyNumber, notif); } public void updateNotify(String text) { notifyNumber++; notif.number = (int) (notifyNumber / 2); Intent contentIntent = new Intent(this, tabactivity.class); contentIntent.putExtra("fid", this.specialvalue); contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); notif.setLatestEventInfo(this, getString(R.string.app_name), text, PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT)); mNotificationManager.cancel((notifyNumber - 2)); mNotificationManager.notify(notifyNumber, notif); } 

因此,updateNotify()在新的gps信号上被调用。 callNotify()是第一个,它启动gps侦听器之前。 而且,是的,通知编号/ 2是我的意图,因为我进一步处理这个数字。

如果我这样编译它,然后点击通知,它会在第一个选项卡上打开一个新的tabactivity。 如果我点击回来,我会得到很多错误(数据库仍然是开放的,空指针和东西)。 我想是因为它开始了新的活动,另一个仍然是开放的,因为我可以看到gps听众还在工作。

所以,我想要的是,我可以做到以下几点:我打开我的应用程序,去tabactivity,打开标签4,单击logging。 如果我点击回来,它应该隐藏应用程序,如果我只是点击主页button。 但有一个通知。 如果我点击那个,它应该只显示隐藏的活动,那就是了。 那么,我在那里做错了什么? 我认为,标志FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP应该解决这个问题吗?

Solutions Collecting From Web of "通知恢复活动"

这里发生的一切有点混乱,所以在这里忍受着我。

FLAG_ACTIVITY_SINGLE_TOP根据文档If set, the activity will not be launched if it is already running at the top of the history stack. 所以如果当前活动不在历史堆栈顶部,它将被重新启动。

FLAG_ACTIVITY_CLEAR_TOP再次来自文档If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.

默认情况下, TabActivity将始终打开到选项卡0,您可以使用setDefaultTab通过代码更改该选项。 TabHost中的每个Tab也是一个新的Intent

如果我这样编译它,然后点击通知,它会在第一个选项卡上打开一个新的tabactivity。 如果我点击回来,我会得到很多错误(数据库仍然是开放的,nullpointers和东西)。

我想这是因为当前Intent是tab4(实际上它#3,0,1,2,3),并且您的通知引起tabactivity.class 。 由于它不是主动的或者在堆栈顶部,因此它上面的每一个行为都是closures的,包括tab4。

所以,我想要的是,我可以做到以下几点:我打开我的应用程序,去tabactivity,打开标签4,单击logging。 如果我点击回来,它应该隐藏应用程序,如果我只是点击主页button。 但有一个通知。 如果我点击那个,它应该再次显示隐藏的灵活性,那就是它。 那么,我在那里做错了什么? 我认为,标志FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP应该解决这个问题吗?

你很困惑旗子做什么和back钥匙发生了什么。 打到home将隐藏你的活动,通知应该正常工作与这些标志(一旦你解决了我前面提到的问题)。 当你back ,Android会结束当前的Activity并把它从堆栈中取出。 由于它下面没有任何东西,所以当你按下通知时,你不得不从头开始重新启动。