Luk*_*ner 10 android upgrade bluetooth-lowenergy
我正在尝试将低功耗蓝牙应用程序(连接到自定义物理设备)升级到 Android 12。我已按照文档中的方式设置了所有内容,但它不起作用。
权限:
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BILLING" />
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true" />
Run Code Online (Sandbox Code Playgroud)
代码:
private final ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
Log.d(TAG, "Scan result!");
}
@Override
public void onScanFailed(int errorCode) {
Log.w(TAG, "Scan failed: " + errorCode);
}
};
public void start() {
bluetoothLeScanner.startScan(scanCallback);
}
Run Code Online (Sandbox Code Playgroud)
我还请求使用ActivityResultContracts.RequestMultiplePermissions()合同的权限。当我阅读日志时,我可以看到权限已设置。
现在,当我调用start()-Method 时,我永远不会onScanResult(...)调用 -Method 。当我切换到装有 Android 11 的设备时,它可以正常工作。当我启动 BLE 扫描仪应用程序(来自 Play 商店)时,它会找到该设备。
更新:当我将 targetSdk 设置回 30 时,一切正常(当然使用旧权限等)。
有人遇到同样的问题甚至解决了吗?如有任何建议,将不胜感激。
谢谢!
小智 11
我发现 Andriod 12 仍然需要启用位置服务,android.permission.ACCESS_FINE_LOCATION并且AndroidManifest 中android.permission.BLUETOOTH_SCAN 没有 android:usesPermissionFlags="neverForLocation"标记,并且用户在运行时显式授予这些权限来搜索信标设备。
ACCESS_FINE_LOCATION如果在 AndroidManifest 中将标记添加android:usesPermissionFlags="neverForLocation"到权限,则可以在没有位置服务的情况下找到其他设备类型android.permission.BLUETOOTH_SCAN。
| 归档时间: |
|
| 查看次数: |
9518 次 |
| 最近记录: |