Android отправляет одно и то же намерение независимо от того, находится ли панель запуска на переднем плане или нет.
Правильный.
Ключ Home также не может быть перехвачен пользовательскими приложениями.
Правильный.
Я не понимаю, как это можно сделать.
Если вызов 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" />
</intent-filter>
</activity>
(из старой программы запуска в AOSP)
Затем активность может реализовать onNewIntent()
, чтобы что-то сделать. В случае с вышеупомянутым старым лаунчером его onNewIntent()
включает :
if (!mWorkspace.isDefaultScreenShowing()) {
mWorkspace.moveToDefaultScreen();
}
Это, предположительно, анимирует пользовательский интерфейс обратно к экрану по умолчанию, если пользователь в настоящее время просматривает какой-либо другой экран в наборе экранов, управляемых действием домашнего экрана.
Другой подход к запуску onNewIntent()
вместо использования android:launchMode
состоит в том, чтобы делать это выборочно при вызове startActivity()
, включая соответствующие флаги в Intent
, такие как FLAG_ACTIVITY_REORDER_TO_FRONT
.
person
CommonsWare
schedule
02.11.2012