Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
50 lines (39 sloc) 1.74 KB

这个问题 之前 反编译 过几个竞品, 但是 都没有找到 好方法.
今天通过 @moziqi (https://github.com/moziqi) 的思路, 居然找到了答案.

SO 原帖地址:

http://stackoverflow.com/a/15964856

try {
  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);
} catch (Exception e) {
  // no such mothed ??
  e.printStackTrace();
}

实测 在 andorid M 及其之前 都是 好用的.

但是我的 Android 7 手机和模拟器 均失效.
于是 foreach 打印了一下 Log.e("methods", statusBarClass.getMethods()),
发现 API 居然改动了.
看来只能 等待 下一个月 的 Android N 的正式版 源代码了...

  • android 6
    Android 6

  • android 7
    Android 7

Update 2017-11-13

参考 https://stackoverflow.com/a/44804381/2782426:

Android 7 及其之后, 貌似只能用 AccessibilityService 了...

accessibilityService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS);

Update 2018-01-11

可以使用 adb (手机需要 root), 但是有 1 ~ 3秒 延迟:

adb shell input keyevent KEYCODE_APP_SWITCH