Android launcher press home in launcher to go to default screen

巧了我就是萌 提交于 2019-12-12 08:14:08

问题


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?


回答1:


Android sends the same intent whether the launcher is in the foreground or not.

Correct.

Home key also cannot be intercepted by user apps.

Correct.

I don't understand how this can be done.

If a call to startActivity() will result in the Intent being delivered to an existing instance of the activity, a new instance is not created (by definition) and the existing instance is called with onNewIntent() instead of onCreate().

In the case of a home screen, typically the activity that truly is the home screen will use android:launchMode="singleTask" or android:launchMode="singleInstance" in the manifest, such as:

    <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>

(from an old launcher in the AOSP)

Then, the activity can implement onNewIntent() to do something. In the case of the aforementioned old launcher, its onNewIntent() includes:

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

This, presumably, animates the UI back to the default screen if the user is presently viewing some other screen within the set of screens managed by the home screen activity.

Another approach to trigger onNewIntent(), instead of using android:launchMode, is to do it selectively when you call startActivity(), by including appropriate flags in the Intent, such as FLAG_ACTIVITY_REORDER_TO_FRONT.




回答2:


to be more specific, 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();
    }
}


来源:https://stackoverflow.com/questions/13203536/android-launcher-press-home-in-launcher-to-go-to-default-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!