通知恢复活动

Kee*_*all 9 resume notifications android

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

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

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

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

smi*_*324 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

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

这种情况正在发生我认为因为当前Intent是tab4(实际上是#3,0,1,2,3)并且你的通知正在提出tabactivity.class.由于它不活动或在堆栈顶部,因此它上面的每个动作都会关闭,包括tab4.

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

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

  • 哦等等......如果我只使用FLAG_ACTIVITY_SINGLE_TOP而不是两者,它似乎有效.好吧,如果这是错误的话,我完全不了解文档.抱歉! (2认同)