我尝试为第一次安装应用程序的用户添加欢迎教程。该活动需要在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();
}
}
最终结果是我想要的:带有飞溅屏幕的应用程序启动,然后运行欢迎教程。下一个启动将触发飞溅屏幕,该屏幕将继续进行主要活动(应用程序本身)。当用户单击主屏幕中的快捷方式时,它将获得快捷方式,在启动器中,它将只有一个应用程序快捷方式。