我正在尝试将一个连接到自定义物理设备的Bluetooth Low Energy应用程序升级到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" />
代码:
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);
}
我还使用
ActivityResultContracts.RequestMultiplePermissions()
协议请求权限。日志显示权限已设置。当我调用
start()
方法时,onScanResult(...)
方法从未被调用。当我切换到安装了Android 11的设备时,则能正常工作。当我启动BLE扫描器应用程序(来自Play商店)时,它会找到该设备。更新:当我将目标SDK设置回30时,一切正常(当然,旧的权限等等也是如此)。
有人遇到过同样的问题或解决过吗?非常感谢任何建议。
谢谢!
BLUETOOTH_ADVERTISE
、BLUETOOTH_CONNECT
和BLUETOOTH_SCAN
是运行时权限,因此应用程序必须明确请求用户批准。我在你的片段中没有看到这一点。更多信息请参见:https://developer.android.com/guide/topics/connectivity/bluetooth/permissions - Risto