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

Target SDK29的Cordova应用在Android12上的蓝牙权限及SDK疑问

针对Cordova应用Android12适配问题的解答

疑问1:Android12环境下是否必须申请BLUETOOTH_SCAN权限?若必须,因目标SDK为29,是否无法在运行时申请该权限?

  • 必须声明BLUETOOTH_SCAN权限:只要应用涉及蓝牙扫描功能,在Android12设备上就需要在AndroidManifest.xml中声明该权限。
  • 无需运行时申请:由于应用targetSdkVersion为29,Android12系统会将BLUETOOTH_SCAN权限映射为旧版蓝牙权限范畴,属于正常权限,只要Manifest中声明就会自动授予,不需要在运行时发起权限请求。

疑问2:targetSdk与compileSdk的区别,以及targetSdk除元数据标识外的实际作用

两者核心区别

  • compileSdkVersion:仅作用于编译阶段的参数,是编译应用时使用的Android SDK版本。它决定了你能调用哪些最新的Android API、使用哪些新注解或编译工具特性,不会影响应用在设备上的运行时行为——哪怕用最新的compileSdk编译,只要targetSdk没升级,运行时仍遵循targetSdk对应版本的系统规则。
  • targetSdkVersion:是应用声称已适配完成的最高Android系统版本,是应用与系统的行为约定。

targetSdk的实际作用(除元数据外)

系统会根据targetSdkVersion的值,启用对应Android版本的行为模式:

  • 权限规则:比如targetSdkVersion < 23时,危险权限在应用安装时自动授予;targetSdkVersion >=23时,危险权限需运行时申请。
  • 系统特性限制:比如Android10的分区存储,targetSdkVersion >=29时强制启用,低于29则可通过配置关闭该限制。
  • 行为变更适配:每个Android版本的行为变更(如后台启动Activity限制、蓝牙权限拆分等),系统会依据targetSdk判断应用是否适配了这些变更,进而决定是否启用新的行为规则。

疑问3:当目标SDK为29时,尝试申请BLUETOOTH_SCAN权限会出现什么情况?

  • 系统不会弹出权限请求对话框给用户,会直接返回权限已授予的结果。
  • 调用requestPermissions()方法申请BLUETOOTH_SCAN时,onRequestPermissionsResult()回调会立刻返回PERMISSION_GRANTED状态,但这个操作完全多余——只要Manifest中声明了该权限,系统就已经自动授予了,不需要运行时申请。

内容的提问来源于stack exchange,提问作者tronious

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:13:26