Android:以编程方式打开"最近的应用程序"对话框

Ken*_*nny 13 android

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

谢谢您的帮助!

Ion*_*ers 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);
Run Code Online (Sandbox Code Playgroud)

玩得开心 :)

  • 如果使用上面的代码,请务必将其包装在`try/catch`中 (4认同)

Rag*_*ood 5

你无法访问它.但是,推出自己的并不是很难.该getRecentTasks()方法返回最近运行的应用程序的列表.只需获取列表并添加您自己的UI.

这方面的一个优点是默认的一个,至少在旧版本的Android上,只显示大约8个应用程序.如果您自己滚动可以显示任意多个.

  • 请记住,有些供应商会修改最近的应用程序对话框,因此您的对话框对于这些用户来说看起 (3认同)

Red*_*ter 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);
Run Code Online (Sandbox Code Playgroud)

注意包将在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)
Run Code Online (Sandbox Code Playgroud)