android - 如何根据 SDK 版本选择 Activity 从启动器启动?

标签 android android-5.0-lollipop android-4.4-kitkat

我有一个 Android 应用程序,它在启动器中有多个入口点。 其中一些需要比其他版本更高的 SDK 版本,如果设备的 SDK 版本低于它们的要求,我想禁用或隐藏它们。

基本上我的 list 是这样的:

<application
    ...
    <activity
        android:name=".Activity1"
        ...
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity2"
        ...
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    ... // more launcher activities follows
</application>

Activity1 需要 SDK 版本 19,但是 Activity2 需要 SDK 版本 21。我的最低 SDK 版本是 19。 在 SDK 版本 < 21 的设备上安装应用程序时,我希望隐藏 Activity2

我知道我可以像这样检查 Activity2onCreate 方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        finish();
        return;
    }
    ...
}

但 Activity 显然仍会显示在启动器中。

我也知道这是一个相当独特的问题,对于大多数遇到同样问题的人来说,最简单且可能是最好的解决方案就是不要将多个 Activity 作为启动器 Activity ,但这在我的用例。

最佳答案

请不要在代码中这样做,唯一正确的方法是使用 android:enabled="true/false" 属性,该属性可以在 中的组件上设置>AndroidManifest.xml 文件,如 ActivityBroadcastReceiver。不是硬编码 bool 值,而是使用每个 API 级别更改的 bool 资源:

values/bools.xml:默认情况下禁用这两个 Activity

<bool name="activity_1_enabled">false</bool>
<bool name="activity_2_enabled">false</bool>

values-v19/bools.xml:在 SDK 19 上最多有 20 个 Activity ,其中 1 个启用,2 个禁用

<bool name="activity_1_enabled">true</bool>
<bool name="activity_2_enabled">false</bool>

values-v21/bools.xml:在 SDK 21+ 上,这两个 Activity 均已启用

<bool name="activity_1_enabled">true</bool>
<bool name="activity_2_enabled">true</bool>

AndroidManifest.xml

<activity
    android:name=".Activity1"
    android:enabled="@bool/activity_1_enabled" />

<activity
    android:name=".Activity2"
    android:enabled="@bool/activity_2_enabled" />

关于android - 如何根据 SDK 版本选择 Activity 从启动器启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789811/

相关文章:

Android - TimePicker 分钟到 15

android - 在选择的底部导航 View 项目上重新创建 fragment

java - 在Android Studio中指定发送通知的时间延迟?

android - ActionBar/Toolbar 未显示在 Lollipop 版本的应用程序上

android - 更新到 XE16 后如何将我的 Eclipse 构建部署到 Google Glass

java - Android内存管理: Engine as Singleton?

android - 在 Android 5.0 Lollipop 上不支持 calendarViewShown

android - 5.0 许可错误的最佳修复方法是什么?

android - 使用 Android 系统镜像测试应用

android - 在 Lollipop 设备中使用 Kit Kat DatePicker