Не удается запросить разрешение Bluetooth на Wear OS Samsung Galaxy Watch 4
Я создал образец приложения Wear OS, которое должно обнаруживать устройства BLE, но для моего кода требуется разрешение Bluetooth. Когда я помещаю эти строки в манифест:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
соответствующее разрешение не отображается в настройках / приложениях / разрешениях, и каждый запрос разрешения ничего не делает. Кстати, мои BLE-устройства (динамик и esp-32) тоже не отображаются в настройках / Bluetooth.
Как я могу предоставить разрешения Bluetooth для моего приложения или как я могу подключить устройство BLE к моим часам?
2 ответа
Согласно документации , вам нужны определенные разрешения в зависимости от целевой версии Android API.
Если ваше приложение предназначено для Android 11 (уровень API 30) или ниже, объявите следующие разрешения в файле манифеста вашего приложения:
BLUETOOTH необходим для выполнения любой классической связи Bluetooth или BLE, такой как запрос соединения, принятие соединения и передача данных.
ACCESS_FINE_LOCATION необходим, потому что на Android 11 и более ранних версиях сканирование Bluetooth потенциально может использоваться для сбора информации о местоположении пользователя.
Если ваше приложение предназначено для Android 9 (уровень API 28) или ниже, вы можете объявить разрешение вместо разрешения.
Чтобы выполнить сканирование для обнаружения устройств BLE, приложение должно явно запросить у пользователя
ACCESS_FINE_LOCATION
или же
ACCESS_COARSE_LOCATION
разрешение также должно быть объявлено в
AndroidManifest.xml
.
В моем проекте (WearOS API версии 28) я использовал этот код в
onCreate
функция
MainActivity
учебный класс
if (ContextCompat.checkSelfPermission(
this, Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(this,new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
1);
}
И я преодолела
onRequestPermissionsResult
функция
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
switch (requestCode) {
case 1:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Logger.d("MainActivity","Permission approved");
} else {
Logger.d("MainActivity","Error getting permission");
}
return;
}
}
Это работает для меня, я надеюсь, поможет вам
есть некоторые разрешения, такие как камера, bluetooth, которые нужно сначала запросить, а затем предоставить вручную. используйте это в действии, которое загружается первым в вашем приложении.
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(arrayOf<String>(Manifest.permission.CAMERA), 1001);
} //ask camera permissions
обязательно внесите необходимые изменения.