如果活动在后台运行,则无需通过启动器即可从小部件恢复现有活动
Posted
技术标签:
【中文标题】如果活动在后台运行,则无需通过启动器即可从小部件恢复现有活动【英文标题】:Resume existing activity from widget without going through the launcher if activity run in background 【发布时间】:2016-03-22 05:07:54 【问题描述】:我的应用程序有一个小部件。此应用程序有两个活动:启动器和主活动。
单击此小部件时,它会打开链接的应用程序,但是现在我正在打开启动器,然后我从其启动器活动启动我的主要活动,即使它已经在后台运行。
是否可以在点击时检查主要活动是否已经在后台运行,如果是,则恢复它;还是以其他方式打开启动器?
我现在正在使用代码从小部件打开启动器。
//LISTENER TO OPEN THE APP ON CLICK
Intent clickIntent = new Intent(context, SplashScreen.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, clickIntent, 0);
// Get the layout for the App Widget and attach an on-click listener to the button
views.setOnClickPendingIntent(R.id.widgetstationlayout, pendingIntent);
【问题讨论】:
试试Resume the Top Activity instead of starting the Launcher Activity 这解决了我的问题,我之前尝试过,但它让我意识到我当时的实现是错误的。谢谢。 【参考方案1】:要将您的应用程序以任何状态置于前台,请使用以下命令:
Intent intent = getPackageManager().
getLaunchIntentForPackage("your.package.name");
startActivity(intent);
如果您的应用程序已经在运行,这会将现有任务以它移动到后台时的任何状态带到最前面。如果您的应用未运行,这将从头开始启动您的应用。
这就像您点击了应用程序图标一样。
【讨论】:
感谢您的回答,但是由于原始帖子的第一条评论中提供的链接,我的问题已得到解决:) 太糟糕了。对于您的问题,该答案实际上是一个糟糕的选择。 由于我对 android 上的活动和片段生命周期的行为并不是真正的专家,你能解释一下为什么吗?答案上提供的解决方案似乎是个不错的选择…… 这个答案是一个黑客。这是一种解决方法,因为如果您正确地恢复应用程序(我在这个答案中向您展示的方式),问题就不会首先出现。而且,正如其中一位 cmets 所说,假设您的应用中有 15 个活动,您需要将该代码放入 15 个活动中的每一个中。这只是糟糕的编程。以上是关于如果活动在后台运行,则无需通过启动器即可从小部件恢复现有活动的主要内容,如果未能解决你的问题,请参考以下文章
onActivityResult 从未从小部件启动的活动中调用