将清单结果中的主要活动更改为快捷方式不再有效



我尝试为第一次安装应用程序的用户添加欢迎教程。该活动需要在Manifest中声明为主要(或者我想念什么?)。但是,如果我选择以外的其他活动(实际应用程序),则应用程序快捷方式(Android 7.1)不再起作用。但是有趣的是,快捷方式仍然可以在自定义启动器(Apex,Nova)中找到。有什么想法吗?

(几乎全部)Google应用程序欢迎教程以及启动器快捷方式。我无法理解他们是怎么做到的?

欢迎教程不必是一项活动。它可能是其他类型的演示(例如,片段)。

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

谢谢您的答案通用软件!您的陈述可以帮助我找到答案。因此,我想启动一个显示"飞溅"屏幕的应用程序,然后欢迎教程。此外,应用程序需要在主屏幕上工作快捷方式,只有一个启动器图标。因此,首先,我将Splash屏幕声明为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();
}

}

最终结果是我想要的:带有飞溅屏幕的应用程序启动,然后运行欢迎教程。下一个启动将触发飞溅屏幕,该屏幕将继续进行主要活动(应用程序本身)。当用户单击主屏幕中的快捷方式时,它将获得快捷方式,在启动器中,它将只有一个应用程序快捷方式。

最新更新