использовать targetSdkVersion29, не удается обнаружить устройство BLE

#bluetooth-lowenergy

#bluetooth-lowenergy

Вопрос:

Когда для targetsdkversion установлено значение 28, поиск устройств ble может выполняться в обычном режиме.

Но я не могу найти устройства ble, когда для targetsdkversion установлено значение 29.

 <uses-feature android:name="android.permission.BLUETOOTH_ADMIN" android:required="false"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:required="false"/>
<uses-permission android:name="android.permission.BLUETOOTH" android:required="false"/>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:required="false"/>
<uses-permission android:name="andriod.permission.ACCESS_FINE_LOCATION" android:required="false"/>
 

Мой код выглядит следующим образом

 bluetoothAdapter.getBluetoothLeScanner().startScan(buildScanFilters(), buildScanSettings(), new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
    super.onScanResult(callbackType, result);
    
}

@Override
public void onBatchScanResults(List<ScanResult> results) {
    super.onBatchScanResults(results);
}

@Override
public void onScanFailed(int errorCode) {
    super.onScanFailed(errorCode);
}
});
 

Ответ №1:

Вы также запрашиваете разрешения во время выполнения? Специально для точного определения местоположения?

Из https://developer.android.com/about/versions/10/privacy/changes#location-telephony-bluetooth-wifi:

Примечание: Если ваше приложение работает на Android 10 или выше, но нацелено на Android 9 (уровень API 28) или ниже, вы можете использовать затронутые API (за исключением API WifiP2pManager), если в вашем приложении указано разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION.

Возможно, это тот случай, с которым вы столкнулись, как и раньше, было нормально иметь только грубое местоположение.

Кроме того, не уверен, что это просто ошибка копирования / вставки, но в вашем коде есть опечатка в <uses-permission android:name="andriod.permission.ACCESS_FINE_LOCATION" android:required="false"/> строке —> «andriod».

В качестве альтернативы, может быть, попробовать API-интерфейс сопутствующего устройства?

https://developer.android.com/guide/topics/connectivity/companion-device-pairing