8

猜想我对 Intent Flags 有一些误解。我想做的是,我有一个无线电流应用程序,它有两个活动(PlayerApplication 和 SettingsScreen)。我有一个 Service.class 用于在后台运行的 Streaming,它也包含一个通知(您可以在通知覆盖菜单和 PlayerApplication 中停止/开始播放)。如果用户点击通知,PlayerApplicationActivity 应该返回屏幕。

一切正常,期待这种情况:用户打开 SettingsScreenActivity -> 打开 NotificationOverlayMenu -> 点击通知 -> PendingIntent 恢复到 PlayerApplicationActivity

现在,PlayerApplicationScreen 在那里,但我不能点击任何东西。我看到,如果我从通知恢复,我的 PlayerApplication 的 onCreate() 不会被触发。但布局看起来不错(也在 onCreate() 中膨胀)

我在 Service.class 中使用了以下 PendingIntent:

PendingIntent contentIntent = PendingIntent.getActivity(
      this.getApplicationContext(), //Service.class
      0, 
      new Intent(this,PlayerApplicationActivity.class)
             .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP),
      0);

所以实际上 PendingIntent 应该将 Activity(如果已经运行)带回顶部。我是在使用错误的意图还是我错过了一点?

编辑:我在 Manifest.xml 中声明了 launchMode

android:launchMode="singleTask"
4

2 回答 2

7

根据 android developer site,在FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP启动模式下:SingleTask,如果您正在调用的活动实例已经在运行,那么它不会创建新实例,而是调用onNewIntent()方法。所以我认为你应该检查当 onCreate() 没有调用时你的活动正在运行的情况。

于 2013-03-05T17:17:31.120 回答
1

我刚刚弄清楚我做错了什么:

  1. 出于我的目的,我使用了错误的启动模式。对的singleTop不是singleTask

  2. <application-node>我在而不是声明了launchMode<activity-node>

    //Manifest.xml
    <activity
        android:name="..."
        android:launchMode="singleTop" >
    
于 2013-03-07T18:26:26.043 回答