升级至SDK 31后Android快捷设置Tile无法正常工作
问题根源是SDK 31(Android 12)对应用组件的android:exported属性做了强制检查,你的快捷设置Tile服务配置不符合新规则:
- 当服务声明了
<intent-filter>时,SDK 31要求必须显式设置android:exported="true"——因为系统需要通过这个intent-filter启动并绑定Tile服务。 - SDK 30及以下版本中,带intent-filter的服务默认
exported为true,所以之前能正常运行;但SDK 31开始必须显式声明,否则系统会判定该服务不可用,导致Tile显示“Unavailable”且无法点击。
修改后的Manifest配置
把服务的android:exported从false改为true即可。尽管设置为true,但由于你声明了android.permission.BIND_QUICK_SETTINGS_TILE权限,只有系统能绑定该服务,不存在安全风险:
<service android:name="<mypackagename>.QuickSettingsTileService" android:exported="true" android:label="@string/app_name" android:icon="@drawable/<myapp>icon_on" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE" /> </intent-filter> <meta-data android:name="android.service.quicksettings.ACTIVE_TILE" android:value="true" /> </service>
验证步骤
修改配置后重新编译安装应用,进入快捷设置的编辑模式,先移除当前的Tile,再重新添加,即可恢复正常点击和切换功能。
内容的提问来源于stack exchange,提问作者n3mo
相关产品推荐
相关产品推荐

