You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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"确保高版本中移除该服务注册:

  1. 首先在manifest根标签引入tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
  1. 修改服务声明:
<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:按版本动态禁用服务

通过资源文件控制服务的启用状态,保留注册但在高版本中禁用:

  1. 在res/values/bools.xml中添加默认启用配置:
<bool name="enable_tile_service">true</bool>
  1. 在res/values-v34/bools.xml中添加高版本禁用配置:
<bool name="enable_tile_service">false</bool>
  1. 修改服务声明,引用该布尔值:
<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:35:31