Intereting Posts
Параллельная анимация в Imageview Как найти мои данные / данные / данные приложения с помощью проводника Android Device Monitor Сообщения об ошибках libagl alphaPlaneWorkaround в LogCat Как связаться с сервером Node.js от клиента Android Возможно ли получить доступ к ресурсам в другой APK без использования поставщиков контента? Приложения из последних приложений возвращаются в пусковую установку, а не пользовательскую пусковую установку Передача через Wi-Fi Direct Импортировать весь импорт в eclipse сразу? Ошибка: java.lang.NoClassDefFoundError Android Как установитьTheme для активности во время выполнения? Он не работает с вызовом setTheme перед onCreate и setContentView DrawMatching между двумя изображениями – распознавание изображений Загрузка изображения на сервер в Multipart вместе с данными JSON на Android Android @NonNull полезность Как уменьшить размер приложения (.apk) Android-приложение занимает много памяти

Bluetooth Low Energy startScan на Android 6.0 не находит устройства

Я разрабатываю приложение с Bluetooth Low Energy, используя Nexus 5. Он работал на Lollipop, и теперь он не работает над Marshmallow. Я установил разрешения ACCESS_COARSE_LOCATION и ACCESS_FINE_LOCATION в манифесте и в runTime в Activity.

Это список ScanFilters:

mScanFilterTest = new ScanFilter.Builder().build(); mScanFilter = new ArrayList<ScanFilter>(); mScanFilter.add(mScanFilterTest); 

Это настройки:

 mScanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(0) .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).build(); 

Это мои обратные вызовы:

  mBLEScan = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { super.onScanResult(callbackType, result); Log.i(TAG, "******************************************"); Log.i(TAG, "The scan result " + result); Log.i(TAG, "------------------------------------------"); } }; 

Это мой призыв:

 mBluetoothLeScanner.startScan(mScanFilter, mScanSettings, mBLEScan); 

Он запускает сканирование, но не находит никакого устройства. Пожалуйста, помогите мне!!!!

Solutions Collecting From Web of "Bluetooth Low Energy startScan на Android 6.0 не находит устройства"

Я боролся с тем же вопросом. Чтобы исправить это, вы должны включить «Местоположение» (GPS) в настройках телефона, а также разрешение на размещение запросов в приложении во время выполнения. Оба должны быть выполнены для правильной работы сканирования.

Чтобы запросить разрешение на размещение, в диалоговом окне или в подобном случае укажите следующее:

 yourActivity.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, yourPermissionRequestCode); 

И реализовать:

 @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){ if(requestCode == yourPermissionRequestCode) { ... //Do something based on grantResults } } 

В yourActivity и обрабатывать все, что пользователь выбирает. Для включения служб определения местоположения вашего устройства также необходимо выполнить следующие действия:

 Intent enableLocationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); yourActivity.startActivityForResult(enableLocationIntent, yourServiceRequestCode); 

Вы можете проверить, включил ли пользователь услуги определения местоположения, выполнив:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == yourServiceRequestCode) { ...//Do whatever you need to } } 

В yourActivity . Вы также можете вручную включить службы определения местоположения (GPS), выполнив следующие действия:

Enter phone settings -> Select "Location" -> Then turn it on

Он должен выглядеть так в настройках телефона:

Службы местоположения (GPS) включены в настройках телефона

Или, например, это происходит при быстром настройке:

Службы местоположения (GPS) включены в выпадающих настройках

После того как пользователь включил разрешение и начал использовать службы определения местоположения, вы должны начать сканирование. Я заметил, что если вы уже сканируете, когда вы включаете разрешение / включаете службу определения местоположения, он все равно ничего не помещает в ваши onScanResults

Я не уверен, что это ошибка или «функция» для рекламы iBeacons / Bluetooth (ПРИМЕЧАНИЕ: реклама как в продаже продуктов, а не техническая реклама Bluetooth) позволяет компаниям видеть ваше местоположение и направлять вас туда, где они хотят.

Надеюсь, это исправляет вашу проблему!

EDIT Я хотел добавить: вам нужно только это для СКАНИРОВАНИЯ. Как только вы подключитесь к устройству BLE, вы можете отключить службу определения местоположения на своем телефоне, и вы все равно будете подключены к вашим устройствам. Однако вы не можете обнаружить или подключиться к каким-либо новым устройствам, и все рекламные устройства упадут с onScanResults

Как @Jacopo Tosi говорят, что вы должны запросить разрешения на доступ. Вы можете прочитать здесь, как это сделать. И вы также должны включить «Местоположение». Я не знаю, почему это произошло. Но это единственный способ, которым мне удалось заставить его работать.

В моем случае (HTC M9) мне также пришлось войти в меню настроек Android под Bluetooth и вручную сканировать устройства BT.