在默认的Android启动器中,在另一个活动中按home将启动启动器。在启动器中再次按home将重置为默认主屏幕页面。我不明白如何做到这一点。无论启动器是否在前台,Android都会发出相同的意图。主页密钥也不能被用户应用程序拦截。
有没有办法实现这个目标?
答案 0 :(得分:11)
Android发出相同的意图,无论启动器是否在前台。
正确。
主页密钥也不能被用户应用程序拦截。
正确。
我不明白如何做到这一点。
如果对startActivity()
的调用将导致Intent
被传递到活动的现有实例,则不会创建新实例(根据定义),并使用{{调用现有实例1}}而不是onNewIntent()
。
对于主屏幕,通常 主屏幕的活动通常会在清单中使用onCreate()
或android:launchMode="singleTask"
,例如:
android:launchMode="singleInstance"
(来自an old launcher in the AOSP)
然后,活动可以实施 <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>
来执行某些操作。对于上述旧发射器,its onNewIntent()
includes:
onNewIntent()
如果用户当前正在查看主屏幕活动管理的一组屏幕中的其他屏幕,则可能会将UI动画回默认屏幕。
触发 if (!mWorkspace.isDefaultScreenShowing()) {
mWorkspace.moveToDefaultScreen();
}
而不是使用onNewIntent()
的另一种方法是,当您通过在android:launchMode
中添加适当的标记来调用startActivity()
时,有选择地执行此操作,例如Intent
。
答案 1 :(得分:5)
更具体一点,做
@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();
}
}