我有一个 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
。
我知道我可以像这样检查 Activity2
的 onCreate
方法:
@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
文件,如 Activity
或 BroadcastReceiver
。不是硬编码 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/