应用程序(非通缉)行为 -
但是 - 不是原始实例,而是启动新实例(例如,在最新的实例中缺少原始文本;当最新实例关闭时,仍然存在具有原始文本的原始实例。)
通知方法的代码
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"
但它仍然是一样的...... 主要问题是应用程序的双/三初始化,我知道还有其他方法可以保留恢复的应用程序中的值。 此外,还需要应用程序保持在后台运行,因为主要功能是互联网广播流。
代码中缺少什么? 我方缺少哪些信息来解决问题?
谢谢!
DAV
答案 0 :(得分:20)
答案 1 :(得分:13)
另一种选择是在setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
上使用Intent
。
答案 2 :(得分:3)
将此标记添加到您的活动属性中。
android:launchMode =“singleInstance”
答案 3 :(得分:2)
您可以在PendingIntent上设置PendingIntent.FLAG_CANCEL_CURRENT:
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
如果活动已经存在,新活动将取消而不更新旧活动! 这对我有用!
答案 4 :(得分:1)
作为服务重新实现 - 一切都按预期工作
答案 5 :(得分:0)
我使用GCM示例作为个人项目的基本代码,我遇到了相同的问题。 GCM示例:https://github.com/googlesamples/google-services/tree/master/android/gcm/app/src/main/java/gcm/play
我通过结合答案找到了解决方案:
1)从@ognian回答,通过在应用程序部分添加App Manifest:
<强>机器人:launchMode =&#34; singleTop&#34; 强>
<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);
答案 6 :(得分:0)
使用以下组合对我有用。
1)在Manifest文件中添加启动模式 的机器人:launchMode = “singleInstance”强>
2)在创建意图时设置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);
答案 7 :(得分:0)
这会将应用程序恢复到 MainActivity ,即使它已打开子活动。儿童活动也被清除。
AndroidManifest:
android:launchMode="singleTop"
代码:
val intent = Intent(context, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)
答案 8 :(得分:-2)
而不是:
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);