In the default android launcher, pressing home while in another activity will start the launcher. Pressing home again while in the launcher will reset to the default home screen page. I don't understand how this can be done. Android sends the same intent whether the launcher is in the foreground or not. Home key also cannot be intercepted by user apps.
Is there a way to achieve this?
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
。
更具体,做
@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();
}
}