通知恢复活动

时间:2010-08-25 12:56:16

标签: android notifications resume

我知道,这种类型有几个问题,但我尝试了所有这些问题,但仍然无效 好的,对于我的应用;我有一个活动。在此活动中,有4个选项卡,第四个包含列表和记录按钮。当我推送记录时,有一个GPS监听器启动。获得新的gps值后,它会将其推入列表中 到目前为止这个工作! 如果我单击主页按钮它仍然有效,如果我长按它。它将恢复具有特定选项卡的活动,列表仍然保留列表项,并且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);
}

因此,在新的gps信号上调用updateNotify()。在启动gps监听器之前,callNotify()是第一个。而且,是的,notifyNumber / 2是我的意图,因为我进一步使用了这个号码。

如果我像这样编译它,然后单击Notification,它会在第一个选项卡上打开一个新的tabactivity。如果我点击回来,我会收到很多错误(数据库仍然是打开的,nullpointers和东西)。我认为因为它开始了一个新的tabactivity而另一个仍然是开放的,因为我可以看到gps监听器仍在工作。

所以,我想要的是,我可以做到以下几点: 我打开我的应用程序,转到tabactivity,打开选项卡4,单击记录。如果我单击后退,它应该隐藏应用程序,如果我只是单击主页按钮。但有通知。 如果我点击那个,它应该只显示隐藏的活动,就是这样。 那么,我在那里做错了什么? 我想,Flags FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP应该解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

这里发生的事情有点令人困惑,所以请耐心等待。

根据文档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)并且您的通知正在提升{{1 }}。由于它不活动或在堆栈顶部,因此它上面的每个动作都被关闭,包括tab4。

  

所以,我想要的是,我可以做到   以下:我打开我的应用程序,转到   tabactivity,打开选项卡4,单击记录。   如果我再点击它,它应该隐藏   该应用程序,如果我只是点击   主页按钮。但有一个   通知。如果我点击那个,   它应该只显示隐藏   再次活跃,就是这样。所以呢   我在那里做错了?我想,   标志FLAG_ACTIVITY_CLEAR_TOP和   FLAG_ACTIVITY_SINGLE_TOP应该解决   问题?

您会混淆标记的作用以及tabactivity.classhome键会发生什么。点击back将隐藏您的活动,通知应该可以正常使用这些标记(一旦您解决了我之前提到的问题)。但是当你点击home时,Android会结束当前的back并将其从堆栈中取出。由于它下面没有任何内容,因此当您按下通知时,您将被迫从头开始重新启动。