2017-04-05 131 views
0

我有问题,关于如何关闭应用程序,当用户点击通知从托盘和打开活动。 整个场景如下: 例如我的应用程序名称是testdemo如何关闭当前打开的应用程序,当点击推送通知

假设testdemo应用程序当前打开,用户在应用程序中做一些工作。当时推送通知到达与testdemo应用程序有关。

在这种情况下,用户已经打开testdemo应用程序,但当点击通知时,它再次打开testdemo应用程序。但是我想关闭当前的应用程序而不是打开的应用程序。由于当新应用程序关闭的时候也是testdemo应用程序,但是最后一个屏幕已经被用户点击通知之前打开。

我发送通知如下:

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
  1. 你可以申请无它新的实例轻松打开当前状态。代码以设置你的发射意图 样品:
> @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");

    使用
  • 可以manifest文件里面说该活动仅获得一个实例来防止再次打开它。
  • android:launchMode=["singleTop" | "singleTask" | "singleInstance"]选择任何首选项。 singleTop更有用,在你的情况下,恕我直言。

    +0

    Thnks的答案。你能给出例子或引用的链接,以获得确切的想法。 – ashish

    +0

    @ashish,好的。 DONE – Vyacheslav

    相关问题