Android PendingIntent 将您带到一个已经存在的活动?

Posted

技术标签:

【中文标题】Android PendingIntent 将您带到一个已经存在的活动?【英文标题】:Android PendingIntent take you to an already existing activity? 【发布时间】:2011-07-24 19:55:31 【问题描述】:

真的不知道如何搜索这个...

每当从我的队列中添加或删除作业以在状态栏中放置通知时,我都会调用以下命令:

private void showNotification()

    int jobsize = mJobQueue.size();
    int icon = (jobsize == 0) ? 
        android.R.drawable.stat_sys_upload_done : 
        android.R.drawable.stat_sys_upload;
    Notification notification = 
        new Notification(icon, "Test", System.currentTimeMillis());
    Intent intent = new Intent(this, FileManagerActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

    notification.flags = 
        (Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL);
    notification.setLatestEventInfo(this, 
        "Uploading to our servers",
        getString((jobsize > 0) ? 
            R.string.notification_active_transfers : 
            R.string.notification_no_transfers),
        pendingIntent);

    mNotifyManager.notify(NOTIFICATION, notification);

现在的行为是这样的:

如果用户注销并点击通知,它仍然会打开一个新的 FileManagerActivity(操作!)我可以通过从我的身份验证活动开始并以自然顺序将意图向上传递到我的堆栈来解决这个问题,当应用程序已经运行时,我遇到了困难。

如果用户已经打开 FileManagerActivity,单击通知将在其上放置第二个实例。在这种情况下,我希望当前正在运行的 FileManagerActivity 接收焦点,而不是启动一个新实例。

我怎样才能得到正确的行为?

【问题讨论】:

【参考方案1】:

我之前通过将我的Activity 设置为在应用程序清单中使用launch mode 'singleTop' 来完成此操作。它将使用现有的活动(如果存在)来实现所需的功能。在这种情况下,onNewIntent 将在您的活动中被调用。

如果用户未登录,您需要签入 FileManagerActivity 以进行身份​​验证,并酌情启动新活动。

【讨论】:

我明白了,所以我可能应该对我的所有活动进行严格检查以进行身份​​验证,不是吗?【参考方案2】:

我认为添加这些时有效:

intent.setAction(Long.toString(System.currentTimeMillis()));

PendingIntent.FLAG_UPDATE_CUR

Intent intent = new Intent(context, MyOwnActivity.class);
intent.putExtra("foo_bar_extra_key", "foo_bar_extra_value");
intent.setAction(Long.toString(System.currentTimeMillis()));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

【讨论】:

PendingIntent.FLAG_UPDATE_CURRENT 如果系统中已经有一个在排队的意图,则替换未决意图。它对重新启动上一个活动没有影响。 intent.setAction(Long.toString(System.currentTimeMillis()));像个魅力男人一样工作,谢谢好友

以上是关于Android PendingIntent 将您带到一个已经存在的活动?的主要内容,如果未能解决你的问题,请参考以下文章

android点滴之PendingIntent的使用

Android中pendingIntent的深入理解

Android中pendingIntent的深入理解

什么是 Android PendingIntent?

什么是 Android PendingIntent?

Android PendingIntent的使用