13

我希望能够从我的应用程序中打开“最近使用的应用程序”对话框。这是通过长按主页按钮打开的对话框。我正在为 Android 4.1 或更早版本编程。我通过实现自定义 AccessibilityService 并调用 AccessibilityService.performGlobalAction(GLOBAL_ACTION_RECENTS) 找到了一种方法,但这需要在手机上启用可访问性,这不是很理想。有没有其他方法可以从应用程序打开此对话框?

谢谢您的帮助!

4

3 回答 3

36

此代码不适用于 Nougat 或更高版本

可以触发最近的应用程序活动。

StatusBarManagerService 实现了一个可以通过反射使用的公共方法。

您可以使用以下代码:

Class serviceManagerClass = Class.forName("android.os.ServiceManager");
Method getService = serviceManagerClass.getMethod("getService", String.class);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar");
Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor());
Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder });
Method clearAll = statusBarClass.getMethod("toggleRecentApps");
clearAll.setAccessible(true);
clearAll.invoke(statusBarObject);

玩得开心

于 2013-04-12T06:47:31.250 回答
5

您无法访问它。但是,自己动手并不难。getRecentTasks()方法返回最近运行的应用程序列表。只需获取列表并向其中添加您自己的 UI。

这样做的一个好处是默认的,至少在旧版本的 Android 上,只显示大约 8 个应用程序。如果您自己滚动,可以显示任意数量的内容。

于 2013-01-14T10:17:28.997 回答
5

这可以使用TOGGLE_RECENTS Intent 来完成。

Intent intent = new Intent ("com.android.systemui.recent.action.TOGGLE_RECENTS");
intent.setComponent (new ComponentName ("com.android.systemui", "com.android.systemui.recent.RecentsActivity"));
startActivity (intent);

注意包将根据 API 级别进行更改。看这里。

Android 4.1: "com.android.internal.policy.impl.RecentApplicationsDialog"
Android 4.2 - 4.4: "com.android.systemui.recent.RecentsActivity"
Android 5.0 - 7.1: "com.android.systemui.recents.RecentsActivity" ("s" letter was added)
于 2015-06-01T17:25:45.080 回答