代码之家  ›  专栏  ›  技术社区  ›  Keenora Fluffball

通知恢复活动

  •  8
  • Keenora Fluffball  · 技术社区  · 14 年前


    好的,我的应用程序;我有一个活动。在这个活动中,有4个选项卡,第四个选项卡包含一个列表和一个记录按钮。当我按下记录,有一个GPS侦听器启动。在获得一个新的gps值后,它会将其推到列表中。
    到目前为止还可以!
    如果我点击主页按钮,它仍然工作,如果我长按它然后。它会在特定选项卡打开的情况下恢复该活动,并且列表仍然包含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);
    }
    

    因此,对新的gps信号调用updateNotify()。callNotify()是第一个,在它启动gps侦听器之前。而且,是的,2号是我的初衷,因为我和这个号码有更进一步的合作。

    如果我像这样编译它,并单击通知,它会在第一个选项卡上打开一个新的tabactivity。如果我单击back,我会得到很多错误(数据库仍然是打开的,空指针之类的)。我想是因为它启动了一个新的tabactivity,而另一个仍然打开,因为我可以看到gps监听器仍然在工作。

    所以,我想做的是,我可以做到: 如果我点击那个,它应该只是再次显示隐藏的活动,就这样。 那么,我做错了什么?

    1 回复  |  直到 11 年前
        1
  •  6
  •   smith324    14 年前

    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 setDefaultTab 通过密码改变。TabHost中的每个选项卡也是一个新的 Intent

    如果我像这样编译,然后点击 在通知上,它会打开一个新的 第一个选项卡上的选项卡活动。如果我 点击后退,我得到很多错误 等等)。

    这正在发生 我想 意图 是tab4(实际上是#3,0,1,2,3),并且您的通知会显示 tabactivity.class . 因为它不是活动的或在堆栈顶部,所以它顶部的每个动作都是关闭的,包括tab4。

    以下:我打开我的应用程序,转到 选项卡Activity,打开选项卡4,单击record。 如果我点击后退,它应该会隐藏 如果我点击 主页按钮。但是有一个 通知。如果我点击那个, 它应该只显示隐藏的 再活跃一次就这样了。那么,什么 我做错了吗?我以为 标记活动清除顶部和顶部 有什么问题吗?

    home back 钥匙。打 将隐藏您的活动,并且通知应该可以很好地处理这些标志(一旦您解决了我前面提到的问题)。当你击中 后面 不过,Android结束了当前的趋势 Activity 把它从纸堆上取下来。因为它下面没有任何内容,所以当您按下通知时,您必须从头开始重新启动。