我正在开发一项功能,当用户浏览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);
答案 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);
}
}