Не удается запросить разрешение 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

обязательно внесите необходимые изменения.

Другие вопросы по тегам