单击推送通知时如何关闭当前打开的应用程序

时间:2017-04-05 08:00:17

标签: android android-fragments push-notification

关于如何在用户点击托盘通知和打开活动时关闭应用程序,我有疑问。 整个场景如下: 例如,我的应用程序名称是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());
}

2 个答案:

答案 0 :(得分:0)

  1. 您可以轻松打开当前的应用程序状态,而无需新的实例。 设置启动意图的代码示例:
  2. >  @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;
    >         }
    
    1. 您可以通过意图传递意图额外数据,并通过触发器关闭当前活动或应用。
    2. 通过额外使用:

      intent.putExtra("KEY",value);

      检索Activity

      中的使用情况

      value = getIntent().getExtras().get("KEY");

      1. 您可以在内部清单文件中说明此活动只有一个实例,以防止再次打开它。
      2. android:launchMode=["singleTop" | "singleTask" | "singleInstance"]选择任何首选。 singleTop更有用,就像你的情况一样。

答案 1 :(得分:0)

这里我通过添加TaskStackBuilder类和清单文件中的更改来获得解决方案。 请访问以下链接:

https://developer.android.com/training/notify-user/navigation.html#ExtendedNotification