关于如何在用户点击托盘通知和打开活动时关闭应用程序,我有疑问。
整个场景如下:
例如,我的应用程序名称是testdemo
。
假设当前打开了testdemo
应用程序并且用户在应用程序中做了一些工作。此时,推送通知已到达,与testdemo
应用程序相关。
在这种情况下,用户已经打开了testdemo
应用程序,但是当再次单击通知时,它会打开testdemo
应用程序。但我想关闭当前的应用程序而不是打开应用程序。由于新应用程序何时关闭也是testdemo
app,但最后一个屏幕已经打开,即在用户点击通知之前。
我的发送通知如下:
private void sendNotification(String title,
String message,
String receiverUid) {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("uid", receiverUid);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pendingIntent = PendingIntent.getActivity(this, ++NOTIFICATION_ID, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_alert)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(++NOTIFICATION_ID, notificationBuilder.build());
}
答案 0 :(得分:0)
> @SuppressLint("NewApi") > public Intent launchIntent(Context ctx) { > final ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); > Intent intent = new Intent(); > boolean activated = false; > if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { > List<ActivityManager.AppTask> tasks = am.getAppTasks(); > for (ActivityManager.AppTask task: tasks){ > intent = task.getTaskInfo().baseIntent; > intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); > activated = true; > break; > } > } else { > @SuppressWarnings("deprecation") > final List<RecentTaskInfo> recentTaskInfos = am.getRecentTasks(1024,0); > String myPkgNm = ctx.getPackageName(); > if (!recentTaskInfos.isEmpty()) { > RecentTaskInfo recentTaskInfo; > final int size = recentTaskInfos.size(); > for (int i = 0; i < size; i++) { > recentTaskInfo = recentTaskInfos.get(i); > if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(myPkgNm)) > { > intent = recentTaskInfo.baseIntent; > intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); > activated = true; > } > } > } > } > if (!activated) { > intent = new Intent(this, ALaunch.class); > } > return intent; > }
通过额外使用:
intent.putExtra("KEY",value);
检索Activity
value = getIntent().getExtras().get("KEY");
android:launchMode=["singleTop" | "singleTask" | "singleInstance"]
选择任何首选。 singleTop
更有用,就像你的情况一样。
答案 1 :(得分:0)
这里我通过添加TaskStackBuilder类和清单文件中的更改来获得解决方案。 请访问以下链接:
https://developer.android.com/training/notify-user/navigation.html#ExtendedNotification