デフォルトの Android ランチャーでは、別のアクティビティ中にホームを押すと、ランチャーが起動します。ランチャーでもう一度ホームを押すと、デフォルトのホーム画面ページにリセットされます。これがどのように行われるのかわかりません。Android は、ランチャーがフォアグラウンドにあるかどうかにかかわらず、同じインテントを送信します。ホーム キーもユーザー アプリによって傍受できません。
これを達成する方法はありますか?
デフォルトの Android ランチャーでは、別のアクティビティ中にホームを押すと、ランチャーが起動します。ランチャーでもう一度ホームを押すと、デフォルトのホーム画面ページにリセットされます。これがどのように行われるのかわかりません。Android は、ランチャーがフォアグラウンドにあるかどうかにかかわらず、同じインテントを送信します。ホーム キーもユーザー アプリによって傍受できません。
これを達成する方法はありますか?
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" />
</intent-filter>
</activity>
( AOSP の古いランチャーから)
次に、アクティビティを実装onNewIntent()
して何かを行うことができます。前述の古いランチャーの場合、次のものがonNewIntent()
含まれます。
if (!mWorkspace.isDefaultScreenShowing()) {
mWorkspace.moveToDefaultScreen();
}
これはおそらく、ユーザーがホーム画面アクティビティによって管理される一連の画面内の他の画面を現在表示している場合、UI をアニメーション化してデフォルト画面に戻します。
. 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();
}
}