5

最近使用したアプリを表示するメニューを起動したいと思います。

ボタンを押しながらlogcatを見てみましたが、起動できる意図はあるのですが、運が悪かったのです。

一部の電話では専用ボタンであり、ホームボタンを長押ししても発生する可能性があることを私は知っています。プログラムで起動する方法はありますか?

編集:より正確になるようにタイトルを更新しました

4

3 に答える 3

5

「最近のアプリ」ボタンを押すと、logcatは次のメッセージを出力します。

568-716/system_process I/ActivityManager﹕ START u0 {act=com.android.systemui.recent.action.TOGGLE_RECENTS flg=0x10800000 cmp=com.android.systemui/.recent.RecentsActivity} from pid 627
    --------- beginning of /dev/log/main
568-582/system_process I/ActivityManager﹕ Displayed com.android.systemui/.recent.RecentsActivity: +215ms

したがって、プログラムでこの操作をシミュレートできます。(フラグを0x10800000に設定することを忘れないでください):

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

の詳細については、こちらRecentsActivityのソースコードをお読みください。

于 2015-09-08T08:42:32.530 に答える
3

@Floermの投稿と同じように、このコードはandroid Nの下でのみ機能し、androidNではIStatusBarServiceAPIが変更されているため、このようにアクセスすることはできません。

private void openRecentApps() {
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) {
    e.printStackTrace();
}}

Android Nで最近のアプリを起動する場合は、AccessibilityServiceを使用する必要があります。

accessibilityService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS);
于 2017-06-28T13:48:36.460 に答える
0

いいえ、これは不可能です(主に、さまざまな難解なAndroid OS間でこれが処理される多くの方法が原因です)。ただし、実行中のプロセスのリストを取得して、独自の最近のアプリのリストを作成することはできます。(おそらく、この答えまたはこれがあなたを助けるでしょう。)

于 2012-09-10T02:59:45.143 に答える