如何在Android 34+中禁用TileService,低版本保留?
在Android 34+版本中排除TileService的实现方案
问题概述
从Android 34开始,TileService无法启动前台服务,也无法调用location、camera、mic功能(暂无官方明确说明,但小部件和快捷方式功能仍可用),因此原有TileService已失去预期作用,需在Android 34及更高版本中排除该服务。
当前AndroidManifest.xml中的服务声明代码:
<service android:name="com.example.service.StartStopRecTileService" android:exported="true" android:icon="@drawable/ic_test" android:label="@string/app_name" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE" /> </intent-filter> </service>
更新补充
- 曾误判TileService在Android API 35+中可正常启动前台服务,实际是因为获取了悬浮窗权限并使用临时方案,并非原生支持;
- 确认TileService在Android 34及更高版本中均无法正常启动前台服务,原有功能失效,需针对对应版本处理。
可行解决方案
方案1:直接在API34+中移除服务声明
通过android:maxSdkVersion指定服务仅在API33及以下版本生效,配合tools:node="remove"确保高版本中移除该服务注册:
- 首先在manifest根标签引入
tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
- 修改服务声明:
<service android:name="com.example.service.StartStopRecTileService" android:exported="true" android:icon="@drawable/ic_test" android:label="@string/app_name" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" android:maxSdkVersion="33" tools:node="remove"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE" /> </intent-filter> </service>
方案2:按版本动态禁用服务
通过资源文件控制服务的启用状态,保留注册但在高版本中禁用:
- 在
res/values/bools.xml中添加默认启用配置:
<bool name="enable_tile_service">true</bool>
- 在
res/values-v34/bools.xml中添加高版本禁用配置:
<bool name="enable_tile_service">false</bool>
- 修改服务声明,引用该布尔值:
<service android:name="com.example.service.StartStopRecTileService" android:exported="true" android:icon="@drawable/ic_test" android:label="@string/app_name" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" android:enabled="@bool/enable_tile_service"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE" /> </intent-filter> </service>
方案对比
- 方案1彻底移除高版本中的服务注册,无冗余信息;
- 方案2仅禁用服务,保留注册记录,适合后续可能复用服务的场景。
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

