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

时间:2016-11-27 18:08:31

标签: android manifest android-7.1-nougat

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

2 个答案:

答案 0 :(得分:0)

  

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

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

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

答案 1 :(得分:0)

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

}

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