点击通知后,阻止新的活动实例

应用程序(不需要)的行为 –

  1. 应用程序启动,一些文本被放入文本框,并通过button操作创build通知
  2. 用户“点击”主页button,应用程序被“最小化”,通知在栏中可用
  3. 用户select通知并且应用程序被“最大化”

但是 – 而不是原来的实例,新的实例启动(例如在最新的实例是缺less原始文本,当最新的实例closures,仍然是原始实例原始文本)。

通知方法的代码

Context context = getApplicationContext(); CharSequence contentTitle = "someText1"; CharSequence contentText = "someText2"; Intent notifyIntent = new Intent(Intent.ACTION_MAIN); notifyIntent.setClass(getApplicationContext(), RadioStream.class); PendingIntent intent = PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails); 

我也在标签之后的清单xml文件

 android:launchMode="singleTask" 

但它仍然是一样的…主要的问题是应用程序的双重/三重初始化,我知道还有其他方法来保存在恢复的应用程序中的值。 此外,还需要应用程序保持在后台运行,因为主要function是互联网广播stream。

代码中缺less什么? 缺less什么样的信息来解决问题?

谢谢!

DAV

  • 调用initLoader()后Loader没有启动?
  • 处理完毕后重新启动Android应用程序
  • 从不扩展Activity的类启动服务
  • 为什么在我的Activity启动后,onStop被调用了?
  • Android:在活动之间传递哈希映射
  • 具有ActionBarActivity的ActivityUnitTestCase和startActivity
  • 设置活动片段的参数
  • 自动显示键盘
  • 你所说的“应用程序”最有可能是一个活动。 为了避免重新装箱时,请使用

     android:launchMode="singleTop" 

    要有一些代码运行的背景,你需要实现它作为服务

    另一个select是在你的Intent使用setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)

    将此标志添加到您的活动属性。

    机器人:launchMode = “singleInstance”

    您可以在PendingIntent上设置PendingIntent.FLAG_CANCEL_CURRENT:

     PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    如果活动已经存在,新的将取消而不更新旧的! 这对我有用!

    作为服务重新实现 – 一切按预期工作

    我使用GCM示例作为个人项目的基本代码,并且遇到了上面描述的相同问题。 GCM示例: https : //github.com/googlesamples/google-services/tree/master/android/gcm/app/src/main/java/gcm/play

    我通过结合答案find了一个解决scheme:

    1)从@ognian答案,通过在应用程序部分添加应用程序清单:

    机器人:launchMode = “singleTop”

     <application android:allowBackup="true" android:icon="@mipmap/logo" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" **android:launchMode="singleInstance">** 

    2)从@CommonsWare通过设置setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)

     private void sendNotification(String message) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); 

    它正在为我工​​作,使用下面的组合。

    1)在Manifest文件中添加启动模式android:launchMode =“singleInstance”

    2)在创build意图时设置setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)。

    intent = new Intent(this,StartUpActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    代替 :

     notifyIntent.setClass(getApplicationContext(), RadioStream.class); PendingIntent intent = PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); 

    只需使用这些线,它会帮助你,

     notifyIntent = new Intent(); PendingIntent intent= PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0);