在通知单击将我的应用程序放到后台

时间:2017-10-28 16:21:58

标签: android notifications background-foreground

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

方案

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

2)他被带到谷歌导航,数据导航

3)现在,用户收到POI的Notification,然后点击它,他被带到我的应用程序(我的应用程序被带到前台,仍然是Google Navigation i的后台)

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

我尝试了什么

实现了将我的应用程序带到前台,但是无法实现将我的应用程序置于通知点击后台。

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);

1 个答案:

答案 0 :(得分:1)

moveTaskToBack(boolean bool)是Activity类的一种方法。所以你只能用活动参考来调用它。我不认为有意图这样做的事情。你可以做什么发送广告的通知意图,然后验证活动中的意图,如果它在前景 - >调用movetaskBack()。

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

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

然后在通知点击发送广播。接收此广播的活动将把任务放到后台(仅当它在forground中)

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);

您需要在“活动”中为此操作注册本地广播接收器。

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