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

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

  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

Solutions Collecting From Web of "点击通知后,阻止新的活动实例"

你所说的“应用程序”最有可能是一个活动。 为了避免重新装箱时,请使用

 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);