Android-пусковая установка нажимает кнопку домой в панели запуска, чтобы перейти к экрану по умолчанию

В стартовом андроидном пусковом устройстве нажатие на дом во время другого действия запустит пусковую установку. Повторное нажатие на кнопку "домой" во время запуска "reset" на главной странице главного экрана по умолчанию. Я не понимаю, как это можно сделать. Android отправляет то же самое намерение, является ли программа запуска на переднем плане или нет. Домашний ключ также не может быть перехвачен пользовательскими приложениями.

Есть ли способ достичь этого?

2 ответа

Android отправляет одно и то же намерение, находится ли планшет на переднем плане или нет.

Правильно.

Домашний ключ также не может быть перехвачен пользовательскими приложениями.

Правильно.

Я не понимаю, как это можно сделать.

Если вызов startActivity() приведет к тому, что Intent будет доставлен в существующий экземпляр действия, новый экземпляр не будет создан (по определению), а существующий экземпляр вызывается с помощью onNewIntent() вместо onCreate().

В случае домашнего экрана обычно активность, которая действительно является домашним экраном, будет использовать android:launchMode="singleTask" или android:launchMode="singleInstance" в манифесте, например:

<activity android:name="Launcher" android:launchmode="singleTask" android:cleartaskonlaunch="true" android:statenotneeded="true" android:theme="@style/Theme" android:screenorientation="nosensor" android:windowsoftinputmode="stateUnspecified|adjustPan"> <intent-filter> <action android:name="android.intent.action.MAIN"> <category android:name="android.intent.category.HOME"> <category android:name="android.intent.category.DEFAULT"> <category android:name="android.intent.category.MONKEY"> </category></category></category></action></intent-filter> </activity>

(из старая пусковая установка в AOSP)

Затем, эта активность может реализовать onNewIntent(), чтобы что-то сделать. В случае вышеупомянутой старой пусковой установки ее onNewIntent() включает:

if (!mWorkspace.isDefaultScreenShowing()) { mWorkspace.moveToDefaultScreen(); }

Это, по-видимому, оживляет интерфейс обратно к экрану по умолчанию, если пользователь в настоящее время просматривает другой экран в пределах набора экранов, управляемых действиями на главном экране.

Другой подход к триггеру onNewIntent() вместо использования android:launchMode заключается в том, чтобы сделать это выборочно, когда вы вызываете startActivity(), включив соответствующие флаги в Intent, например FLAG_ACTIVITY_REORDER_TO_FRONT.


более конкретно, do

@Override
protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) { goHome(); }
}

licensed under cc by-sa 3.0 with attribution.