将 Manifest 结果中的 Main Activity 更改为快捷方式不再有效
Changing Main Activity in Manifest result to shortcuts doesn't work anymore
我尝试为首次安装应用程序的用户添加欢迎教程。 activity 需要在 Manifest
中声明为 Main(否则我错过了什么?)。但是,如果我选择除主要应用程序(实际应用程序)以外的任何其他 activity,应用程序快捷方式 (Android 7.1) 将不再起作用。然而有趣的是,自定义启动器(Apex、Nova)的快捷方式仍然可用。有什么想法吗?
(almost all) Google apps has welcome tutorial as well as launcher shortcuts. I can't get it how they did it?
欢迎教程不必是 activity。它可以是某种其他类型的展示(例如,片段)。
欢迎教程,即使它是另一个 activity,也不一定是 launcher activity。启动器 activity 可以检测到它是第一个 运行 并启动教程 activity。
感谢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:
<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();
}
}
最终结果如我所愿:应用启动时出现启动画面,然后运行欢迎教程。下次启动将触发启动画面,该画面将继续主 activity(应用程序本身)。当用户在主屏幕上点击快捷方式时,它会得到快捷方式,而在启动器中它只会有一个应用程序快捷方式。
我尝试为首次安装应用程序的用户添加欢迎教程。 activity 需要在 Manifest
中声明为 Main(否则我错过了什么?)。但是,如果我选择除主要应用程序(实际应用程序)以外的任何其他 activity,应用程序快捷方式 (Android 7.1) 将不再起作用。然而有趣的是,自定义启动器(Apex、Nova)的快捷方式仍然可用。有什么想法吗?
(almost all) Google apps has welcome tutorial as well as launcher shortcuts. I can't get it how they did it?
欢迎教程不必是 activity。它可以是某种其他类型的展示(例如,片段)。
欢迎教程,即使它是另一个 activity,也不一定是 launcher activity。启动器 activity 可以检测到它是第一个 运行 并启动教程 activity。
感谢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:
<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();
}
}
最终结果如我所愿:应用启动时出现启动画面,然后运行欢迎教程。下次启动将触发启动画面,该画面将继续主 activity(应用程序本身)。当用户在主屏幕上点击快捷方式时,它会得到快捷方式,而在启动器中它只会有一个应用程序快捷方式。