3

我想以某种方式模仿最近的应用程序硬按钮单击,它会打开本机 android 最近的应用程序屏幕。

我目前执行以下操作:

boolean success = showRecents1(c);
if (!success) {
    showRecents2(c);
}

这适用于很多设备,但在 android oreo 模拟器上它不起作用。有谁知道也适用于android oreo的解决方案?

private boolean showRecents1(Context c) {
    try {
        Intent intent = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");
        intent.setComponent(new ComponentName("com.android.systemui", "com.android.systemui.recent.RecentsActivity"));
        c.startActivity(intent);
        return true;
    } catch (Exception e) {
        L.e(e);
    }
    return false;
}

private boolean showRecents2(Context c) {
    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);
        return true;
    } catch (Exception e) {
        L.e(e);
    }
    return false;
}
4

0 回答 0