在我的应用程序中,我想以编程方式将最近使用的第三方 Activity 置于最前面。在这里查看其他答案后,我尝试使用从最近任务列表返回的 baseIntent 重新启动活动,但这似乎并没有将活动放在前面,而不是其他正在发生的事情。
我的最终目标是创建一个应用程序,用一个小的覆盖层替换来电屏幕,这样用户在接到电话时就不会完全退出他们正在使用的任何应用程序。我发现您无法替换默认的来电屏幕(如果这不是真的,请告诉我,因为我宁愿这样做)所以作为一种解决方法,我正在尝试调用最近使用的应用程序屏幕的前面(覆盖来电屏幕),然后在上面显示我的覆盖。
这是我正在使用的代码(活动是从广播接收器启动的)
public class BringMRUAppToFront extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ActivityManager activityManager = (ActivityManager) getSystemService("activity");
List<RecentTaskInfo> recentTasks = activityManager.getRecentTasks(1, ActivityManager.RECENT_WITH_EXCLUDED);
if(recentTasks.size() > 2) {
RecentTaskInfo recentTask = recentTasks.get(2);
Intent testIntent = recentTask.baseIntent;
Log.i("MyApp", "Recent task - " + recentTask.baseIntent.getComponent().getPackageName());
testIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(testIntent);
}
finish();
}
}
是否有可靠的方法将任何第三方活动带到前台?该活动保证在内存中(如果一个不在内存中,那么我只会显示主屏幕),所以那里不应该有问题。我也不相信在这种情况下这会是一个安全问题,因为它只会显示一个在电话响起之前可见的应用程序——尽管我知道在 SDK 中打开它可能会带来风险。 ..仍然希望这是可能的。
编辑:稍微修改了代码以反映我在做什么。所需的任务几乎总是列表中的第三个任务 - 第一个是当前任务,第二个是响铃电话的任务。我可以将任务调用到前面,但它并不总是处于相同的状态(例如,转到浏览器的页面而不是浏览器中的设置屏幕)。最近的任务列表是如何做到这一点的?