暂停活动并将数据传递到最顶层的实例

时间:2014-06-29 16:21:52

标签: android android-intent android-activity

应用背景

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

目标

点击通知时,我必须:

  1. 将用户最后的活动带到前面
  2. 显示全屏幕音乐播放器,它是每个活动布局的一部分
  3. 永远不要创建新任务,这意味着点击通知或启动器图标会带来相同的任务
  4. 确定意图的来源(发射器或通知)并采取相应行动(通知弹出全屏播放器,启动器只恢复当前任务
  5. 到目前为止的实施 所以,是的,为此,我有一个名为LauncherActivity的实例活动。所有这一切都是调用LoginActivity(我不能因为Facebook SDK而将LoginActivity设置为singleinstance),然后LoginActivity在登录后调用MainActivity(或者如果已经登录则直接调用它并完成自身)。

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

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

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

1 个答案:

答案 0 :(得分:0)

设置通知时,添加“额外”以表示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