我有一个Android应用程序,它在启动器中有多个入口点。 其中一些需要比其他版本更高的SDK版本,如果设备的SDK版本低于他们所需的版本,我想禁用或隐藏这些版本。
基本上我的Manifest看起来像这样:
<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版本&lt;的设备上安装应用程序时隐藏Activity2
21。
我知道我可以像onCreate
这样的Activity2
方法进行检查:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
finish();
return;
}
...
}
但是活动显然仍然会出现在发射器中。
我也意识到这是一个相当独特的问题,对于大多数有相同问题的人来说,最简单也可能是最好的解决方案就是不要将多个活动作为启动器活动,但这不会有效在我的用例中。
答案 0 :(得分:3)
请不要在代码中执行此操作,唯一正确的方法是使用android:enabled="true/false"
属性,该属性可以在AndroidManifest.xml
文件中的组件上设置,如Activity
或BroadcastReceiver
。不要对布尔值进行硬编码,而是使用每个API级别更改的布尔资源:
values / bools.xml:默认情况下禁用这两项活动
<bool name="activity_1_enabled">false</bool>
<bool name="activity_2_enabled">false</bool>
values-v19 / bools.xml:在SDK 19上,最多启用20个活动1,禁用2个
<bool name="activity_1_enabled">true</bool>
<bool name="activity_2_enabled">false</bool>
values-v21 / bools.xml:在SDK 21+上,两项活动均已启用
<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" />