Android Wi-Fi и Bluetooth-сканирование для определения местоположения - PullRequest
1 голос
/ 08 марта 2019

Есть ли намерение открыть сканирование Wi-Fi и Bluetooth, чтобы попросить пользователя повысить точность определения местоположения?

Example

ОБНОВЛЕНИЕ: я нашел лучший способ напрямую попросить пользователя активировать сканирование Wi-Fi следующим образом:

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.isScanAlwaysAvailable()==false) {
   startActivity(new Intent(WifiManager.ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE));
}

Итак, мой вопрос теперь таков: как я могу сделать то же самое, чтобы запросить сканирование, всегда доступное для Bluetooth? Какое намерение я должен использовать?

Как добраться до этого экрана следующим образом:

Для нуги: откройте настройки Android, перейдите в «Местоположение», меню из 3 точек в правом верхнем углу, «Сканирование».

Для Oreo: откройте настройки Android, перейдите в раздел «Безопасность и местоположение», «Местоположение», «Сканирование»

Для пирога: откройте настройки Android, перейдите в «Расположение», «Дополнительно», «Сканирование».

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Вы можете использовать LocationSettingsRequest , чтобы предложить пользователю включить местоположение. В запросе установите builder.setNeedBle(true); для включения сканирования по Bluetooth.

Пользователю не будет предложено включить сканирование по Bluetooth, если Bluetooth уже включен.

0 голосов
/ 09 марта 2019

Постоянное сканирование по Bluetooth может повлиять на производительность вашего устройства и время автономной работы. Так что подумайте об этом на свой страх и риск.

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

IntentFilter intentFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
registerReceiver(myReceiver, intentFilter);

И попробуйте запустить код.

private BluetoothAdapter mBtAdapter;
mBtAdapter.startDiscovery();

private final BroadcastReceiver mReceiver = new BroadcastReceiver()
{
        @Override
        public void onReceive(Context context, Intent intent)
        {
            String action = intent.getAction();

            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action))
            {
            //do something
            }

            else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
            {
                Log.v(TAG,"Entered the Finished ");
                mBtAdapter.startDiscovery();
            }
...