Activity / 特定 API 级别的意图过滤器

Activity / intent filter for a specific API level

我有一个应用程序包含一个由意图过滤器生成的 activity(在本例中为 android.hardware.usb.action.USB_DEVICE_ATTACHED),它应该做什么(并且确实)如下:当有问题的应用程序不是 运行ning 并且用户连接了一个与应用程序过滤器匹配的 USB 设备(例如,连接的设备与应用程序支持的类型匹配)时,将出现一个弹出窗口请求我的应用程序(或其他具有类似过滤器的应用程序)将被打开。

但是:我只希望 appear/behaviour 的弹出窗口出现在具有特定版本的 Android 设备上(例如:仅 运行 此 activity Android M 及以上,不适用于 Android API 5 级或以下)。

这样的事情可能吗?

要让 activity 本身仅在某些 API 级别可用,请创建一个 boolean 资源,将不同的值绑定到不同的 API 级别。例如,您可以创建一个 res/values/bools.xml 文件,定义一个 boolean 资源,名称为 is_honeycomb,值为 false。然后您可以创建一个 res/values-v11/bools.xml 文件,定义另一个具有相同名称 (is_honeycomb) 和值 trueboolean 资源。您的场景越复杂(例如,"I only want API levels that are prime numbers"),您可能需要定义的资源版本越多。

然后,在 <activity> 元素上有 android:enabled="@bool/is_honeycomb"(替换为您选择的资源名称),它只会在资源为 API 的级别上启用 true.

唉,<intent-filter>没有android:enabled。您可以通过使用 <activity-alias> 作为您有时可用的 <intent-filter>,然后使用 enable/disable 那个别名来解决这个问题,尽管我认为我没有尝试过这个。