0

我尝试为首次安装应用程序的用户添加欢迎教程。该活动需要声明为 Main in Manifest(或者我错过了什么?)。但是,如果我选择除主要活动(实际应用程序)以外的任何其他活动,则应用程序快捷方式(Android 7.1)将不再起作用。然而有趣的是,自定义启动器(Apex、Nova)仍然可以使用快捷方式。任何想法?

4

2 回答 2

0

(几乎所有)Google 应用程序都有欢迎教程和启动器快捷方式。我不明白他们是怎么做到的?

欢迎教程不一定是活动。它可能是某种其他类型的表示(例如,片段)。

欢迎教程,即使它是另一个活动,也不必是启动器活动。启动器活动可以检测到它是第一次运行并启动教程活动。

于 2016-11-28T16:50:10.827 回答
0

谢谢CommonWare的回答!你的陈述帮助我找到答案。所以,我想启动一个显示启动画面的应用程序,然后是欢迎教程。此外,应用程序需要主屏幕上的工作快捷方式以及一个启动器图标。因此,首先,我将启动画面声明为主要内容Manifest.xml

        <activity
        android:name=".SplashActivity"
        android:noHistory="true"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data
            android:name="android.app.shortcuts"
            android:resource="@xml/shortcuts" />
    </activity>

然后,欢迎(教程)活动:

        <activity
        android:name=".IntroActivity.WelcomeActivity"/>

之后,在SplashActivity.class检查首次启动时:

public static final String FIRST_APP_LAUNCH = "com.ips.test";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        if (isFirstAppLaunch()) {
            setFirstAppLaunch(false);
            startActivity(new Intent(this, WelcomeActivity.class));
        } else {
            startActivity(new Intent(this, MainActivity.class));
        }
        finish();
    }

private boolean isFirstAppLaunch() {
    SharedPreferences preferences = this.getPreferences(Context.MODE_PRIVATE);
    return preferences.getBoolean(FIRST_APP_LAUNCH, true);
}

private void setFirstAppLaunch(boolean value) {
    SharedPreferences preferences = this.getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean(FIRST_APP_LAUNCH, value);
    editor.apply();
}

}

最终结果如我所愿:启动应用程序并启动启动画面,然后运行欢迎教程。下次启动将触发启动屏幕,该屏幕将继续主要活动(应用程序本身)。当用户在主屏幕点击快捷方式时,它会得到快捷方式,而在启动器中它只会有一个应用程序快捷方式。

于 2016-11-28T18:40:55.563 回答