在通知上单击将我的应用程序置于后台

On Notification Click put my app to background

我正在开发一项功能,当用户通过 Google 导航应用程序(使用后台服务获取位置更新)进行导航时,我会收到 POI(兴趣点)的通知。

场景

1) 用户从我的应用中点击导航按钮

2) 他被带到 Google 导航数据导航

3) 现在用户收到 Notification 的兴趣点,然后他点击它并被带到我的应用程序(我的应用程序被带到前台,仍然 Google 导航我在后台)

4) 现在用户看到我的应用程序,现在他点击相同的通知,在这种情况下我必须将我的应用程序置于后台,以便现在使用看到 Google 导航

我试过的

实现了将我的应用程序调到前台,但是没有实现将我的应用程序调到后台点击通知。

moveTaskToBack(true) 这是我遇到的,但我如何在通知点击中实现它

代码

Intent intent = new Intent();
        intent.setComponent(new ComponentName(getPackageName(), B_Activity.class.getName()));
        intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra("toFront", toFront);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

moveTaskToBack(boolean bool) 是 Activity class 的一种方法。所以你只能用 activity 引用来调用它。我不认为有办法做到这一点。您可以做什么 在通知意图中发送广播,然后在 activity 中验证意图(如果它在前台)-> 调用 movetaskBack()。

如果你的 B_Activity 没有 Ui 。然后只需在 Pending Intent 中设置 null 组件。 使用本地广播通知您当前 运行 activity 调用 moveTaskToBack()。

Intent intent = new Intent();
intent.setAction("com.settaskback");//Your custom action goes here
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

然后在通知点击时发送广播。将接收此广播的 activity 会将任务置于后台(仅当其在前台时)

final Intent broadcastIntent = new Intent("com.settaskback");
        PendingIntent intent = PendingIntent.getBroadcast(getApplicationContext(), 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        notificationBuilder.setContentIntent(intent);
        notification = notificationBuilder.build();
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        NotificationManager mNotificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, notification);

您需要在 Activity 中为此操作注册本地广播接收器。

@Override
    public void onReceive(Context context, Intent intent) {
          if(somecondition){
              moveTaskToBack(true);
          }
    }