不同 API 级别的不同 AndroidManifest 文件
Different AndroidManifest files for different API levels
我正在创建一个需要收集状态栏通知的应用程序。系统提示用户允许我实施 NotificationListenerService (API >= 18) 或 AccessibilityService(其他设备),然后他们将被重定向到设置屏幕。
当我在 API < 18 时,用户被重定向到辅助功能设置屏幕,他允许辅助功能服务,一切正常。但是,当用户处于 18>= 时,即使用户被重定向到通知设置,他仍然可以导航到辅助功能设置以允许辅助功能服务。然后我的两个服务都在注册通知并通知我。
显然我可以检查消息来自哪个服务并做出相应的反应,但我更喜欢一些更清洁的解决方案。我不希望用户能够允许这两种服务(它们都出现在设置中)。
有没有办法做一些事情,比如为不同的 API 级别定义单独的清单文件,或者在 <application>
标签内声明 <uses-sdk>
以便它们将用于不同的 API 水平?当然,我们不能以编程方式创建服务 - 我们必须在清单中声明它们。
第 1 步:在 res/values/
中创建一个名为 is18
的布尔资源,设置为 false
,并创建第二个名为 isLessThan18
的布尔资源,设置为 true
.
步骤 #2:在 res/values-v18/
中创建名为 is18
的布尔资源,设置为 true
,并创建第二个名为 isLessThan18
的布尔资源,设置为 false
.
第 3 步:使用 android:enabled="@boolean/is18"
作为 <service>
元素作为 NotificationListenerService
。
第 4 步:使用 android:enabled="@boolean/isLessThan18"
作为 <service>
元素作为 AccessibilityService
。
这将只为每台设备启用一项服务,适当的服务由 API 级别决定。
我正在创建一个需要收集状态栏通知的应用程序。系统提示用户允许我实施 NotificationListenerService (API >= 18) 或 AccessibilityService(其他设备),然后他们将被重定向到设置屏幕。
当我在 API < 18 时,用户被重定向到辅助功能设置屏幕,他允许辅助功能服务,一切正常。但是,当用户处于 18>= 时,即使用户被重定向到通知设置,他仍然可以导航到辅助功能设置以允许辅助功能服务。然后我的两个服务都在注册通知并通知我。
显然我可以检查消息来自哪个服务并做出相应的反应,但我更喜欢一些更清洁的解决方案。我不希望用户能够允许这两种服务(它们都出现在设置中)。
有没有办法做一些事情,比如为不同的 API 级别定义单独的清单文件,或者在 <application>
标签内声明 <uses-sdk>
以便它们将用于不同的 API 水平?当然,我们不能以编程方式创建服务 - 我们必须在清单中声明它们。
第 1 步:在 res/values/
中创建一个名为 is18
的布尔资源,设置为 false
,并创建第二个名为 isLessThan18
的布尔资源,设置为 true
.
步骤 #2:在 res/values-v18/
中创建名为 is18
的布尔资源,设置为 true
,并创建第二个名为 isLessThan18
的布尔资源,设置为 false
.
第 3 步:使用 android:enabled="@boolean/is18"
作为 <service>
元素作为 NotificationListenerService
。
第 4 步:使用 android:enabled="@boolean/isLessThan18"
作为 <service>
元素作为 AccessibilityService
。
这将只为每台设备启用一项服务,适当的服务由 API 级别决定。