Android 将暂停的活动置于前端,并将数据传递到最顶层的实例

Android 将暂停的活动置于前端,并将数据传递到最顶层的实例,android,android-intent,android-activity,Android,Android Intent,Android Activity,应用程序背景 带有持续通知的音乐播放器应用程序 目标 一接到通知,我必须: 将用户上次参加的活动带到前台 显示全屏音乐播放器,这是每个活动布局的一部分 永远不要创建新任务,这意味着单击notif或launcher图标会显示相同的任务 确定意图来自何处(launcher或notif),并相应地采取行动(notif弹出全屏播放器,launcher仅恢复当前任务) 到目前为止的实施情况 所以,是的,要做到这一点,我有一个名为LauncherActivity的单实例活动。它所做的只是调用LoginAct

应用程序背景

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

目标

一接到通知,我必须:

  • 将用户上次参加的活动带到前台
  • 显示全屏音乐播放器,这是每个活动布局的一部分
  • 永远不要创建新任务,这意味着单击notif或launcher图标会显示相同的任务
  • 确定意图来自何处(launcher或notif),并相应地采取行动(notif弹出全屏播放器,launcher仅恢复当前任务)
  • 到目前为止的实施情况 所以,是的,要做到这一点,我有一个名为LauncherActivity的单实例活动。它所做的只是调用LoginActivity(由于Facebook SDK,我无法将LoginActivity设置为singleinstance),然后LoginActivity在登录后调用MainActivity(或者如果已经登录,则直接调用它并自行完成)

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


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

    设置通知时,添加一个“额外”以指示
    意图
    来自通知:

    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()
    而不仅仅是
    意图

    您好,很抱歉回复太晚。确实可以将意图发送到该特定活动,但我是否希望将其发送到最顶层的活动?因为主活动可以打开其他活动,理想情况下,我希望将用户返回到他以前正在做的事情,而不是强迫他停止o转到主活动屏幕。抱歉,我不了解您的所有要求。在这种情况下,最好是您的
    通知
    发送一个广播
    意图
    ,而不是启动一个
    活动
    。然后,广播
    意图
    可以在一个静态变量中设置一个标志,指示它正在从a
    通知
    ,然后启动启动活动。然后,所有活动都应在其
    onResume()方法中检查此静态变量,以确定应用程序是如何(重新)启动的。
    
    if (intent.hasExtra("fromNotification")) {
        // Have been launched from the Notification here
    }