我的Android应用程序由一个Activity组成,其中包含两个通过选项卡访问的片段(我使用的是ViewPager)。
在Fragment #2中,通过一个按钮创建了一个通知,该按钮启动了一个后台任务,例如,如果用户使用home按钮将应用发送到后台,则需要继续执行该任务。
我希望用户能够在点击通知时将应用程序返回到最前面,就像使用应用程序图标一样。以下是我的代码:
Notification.Builder mBuilder =
new Notification.Builder(getActivity())
.setSmallIcon(R.drawable.ic_stat_av_play)
.setContentTitle("MyApp")
.setContentText("A background task is running");
Intent notificationIntent = new Intent(getActivity(), MainActivity.class);
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent notificationPendingIntent = PendingIntent.getActivity(
getActivity(), 0, notificationIntent, 0);
mBuilder.setContentIntent(notificationPendingIntent);
mNotificationManager = (NotificationManager) getActivity().getSystemService(
Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, mBuilder.build());
不幸的是,单击通知将关闭当前运行的应用程序并重新启动它。
如您所见,我尝试了此处提出的解决方案:Resume application and stack from notification,但它不起作用。许多类似的问题也建议使用以下一个或多个标志:
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_REORDER_TO_FRONT
我发现这些都对我的通知行为没有任何影响。我是否缺少了一些东西来使这个工作按预期进行?
- 编辑:**
也许这会帮助你帮助我。问题似乎真的来自应用程序的结构。
如果我替换这一行:
Intent notificationIntent = new Intent(getActivity(), MainActivity.class);
被这一个
Intent notificationIntent = new Intent(getActivity(), Fragment2.class);
通知行为将是正确的,如果它被点击,而应用程序仍然在前台(即通知抽屉将简单地关闭自己)然而,如果我返回到主屏幕与主页按钮,然后点击通知,什么也没有发生。
如果我使用第一个Intent定义(带有MainActivity.class),则没有任何标志对Intent有任何影响。这也适用于清单中定义的launchMode。
- 编辑2**
解决方案添加。我不太清楚为什么它是工作,所以任何额外的投入将不胜感激!
5条答案
按热度按时间vptzau2j1#
我用这个方法,问题解决了。希望这也能帮助你。
wwwo4jvm2#
你能试试这个吗,
在你的旅客名单上,
用于您的主要活动。
mbzjlibv3#
所以,我终于设法使它工作!这里是最终的代码,我希望它能帮助其他人谁是在类似的情况。
我还必须在清单中设置这个launchMode:
jc3wubiy4#
你可以试试,也许能帮到你!
bpsygsoo5#
对我来说,唯一有效的方法是从
PackageManger
获取启动意图: