我希望能够从我的应用程序中打开“最近的应用程序”对话框。这是通过长按主页按钮打开的对话框。我正在为Android 4.1或更早版本编程。我找到了一种方法来实现自定义AccessibilityService并调用AccessibilityService.performGlobalAction(GLOBAL_ACTION_RECENTS),但这需要在手机上启用可访问性,这是不太理想的。还有其他方法可以从应用程序打开此对话框吗?
感谢您的帮助!
答案 0 :(得分:36)
很抱歉,但可以触发最近的应用活动。
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);
玩得开心:)
答案 1 :(得分:5)
你无法访问它。但是,推出自己的并不是很难。 getRecentTasks()方法返回最近运行的应用列表。只需获取列表并添加自己的UI。
这样做的一个优点是默认的一个,至少在旧版本的Android上,只显示大约8个应用程序。如果您自己滚动可以显示任意多个。
答案 2 :(得分:5)
可以使用 TOGGLE_RECENTS 意图来完成。
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级别更改。 See here.
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)