【问题标题】:Bring paused activity to front and deliver data to topmost instance将暂停的活动置于最前面并将数据传送到最顶层的实例
【发布时间】:2014-06-29 16:21:52
【问题描述】:

应用背景

带有持续通知的音乐播放器应用

目标

点击通知时,我必须:

  1. 将用户最后一次进行的任何活动都放在前面
  2. 显示作为每个活动布局一部分的全屏音乐播放器
  3. 永远不要创建新任务,这意味着单击通知或启动器图标会显示相同的任务
  4. 确定意图来自何处(启动器或通知)并采取相应措施(通知弹出全屏播放器,启动器只是恢复当前任务

实施至今 所以是的,为此,我有一个名为 LauncherActivity 的单个实例活动。所有这一切都是调用 LoginActivity(由于 Facebook SDK,我无法将 LoginActivity 设置为单实例),然后 LoginActivity 在登录后调用 MainActivity(或者如果已经登录,则直接调用它并自行完成)。

现在在我的服务中,我有一个待定意图设置为启动启动器活动,操作设置为主要,类别设置为启动器(与启动器使用的意图格式相同):

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

现在我的问题是,如何将数据发送到最顶层的活动?该活动如何知道它是通过通知而不是启动器图标启动的?

【问题讨论】:

    标签: android android-intent android-activity


    【解决方案1】:

    在设置通知时,添加一个“额外”以表明Intent来自通知:

    Intent i = new Intent(this, MyMainActivity.class);
    i.setAction(Intent.ACTION_MAIN);
    i.addCategory(Intent.CATEGORY_LAUNCHER);
    i.putExtra("fromNotification", true);
    startActivity(i);
    

    MyMainActivity.onNewIntent()MyMainActivity.onCreate() 中,您可以检查您是否已从通知中启动,如下所示:

    if (intent.hasExtra("fromNotification")) {
        // Have been launched from the Notification here
    }
    

    onCreate() 中,您需要使用getIntent() 而不仅仅是intent

    【讨论】:

    • 您好,抱歉回复晚了。当然,这适用于将意图发送到该特定活动,但是如果我希望将其传递给 TOPMOST 活动呢?因为主要活动可以打开其他活动,理想情况下,我希望用户返回到他之前所做的事情,而不是强迫他进入主要活动屏幕。
    • 抱歉,没有完全理解您的要求。在这种情况下,如果您的Notification 发送广播Intent 而不是启动Activity 可能会更好。然后广播Intent 可以在静态变量中设置一个标志,表明它是从Notification 启动的,然后开始您的启动活动。然后,您的所有活动都应在其 onResume() 方法中检查此静态变量,以确定应用程序是如何(重新)启动的。
    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多