我正在开发一项功能,当用户在谷歌导航应用程序(使用后台服务获取位置更新)中导航时,我可以获得POI(兴趣点)的通知。
场景
1) 用户从我的应用点击导航按钮
2) 他被带到谷歌导航,用数据导航
3) 现在用户收到POI的Notification
,然后他点击它,他被带到我的应用程序(我的应用软件被带到前台,仍然是谷歌导航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);
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);
然后点击通知发送广播。将接收此广播的活动将把任务放在后台(仅当它在前方时)
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);
}
}