Исключение разрешений для сканера Android BLE - PullRequest
0 голосов
/ 12 июня 2018

У меня проблемы с получением результатов сканирования со сканера BLE.У меня есть соответствующие разрешения (ACCESS_COARSE_LOCATION) в моем AndroidManifest.xml, как описано ниже, но я получаю исключение, которое указывает, что мне нужны те разрешения, которые у меня есть.Не удивительно, что обратный вызов сканера никогда не вызывается.

W/Binder: Caught a RuntimeException from the binder stub implementation.
          java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results.  I'm not sure why the exception is thrown but I certianly DON'T get scan call backs.


<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />


ScanCallback btScanCallback = new ScanCallback()
{
    @Override
    public void onScanResult(int callbackType, final ScanResult result)
    {
        BluetoothDevice btDevice = result.getDevice();
        Log.d(LOGTAG, "Found BLE device: " + btDevice.getName());


        // Remove the device from the scanner select view if its there already
        for( int i=0; i<btDeviceNameList.size(); i++)
        {
            String aDevice = btDeviceNameList.get(i);

            if(aDevice.equalsIgnoreCase(btDevice.getName()))
            {
                btDeviceNameList.remove(i);
                btDeviceList.remove(i);
                break;
            }
       }

        // Add the device to the scanner select view
        btDeviceList.add(btDevice);
        btDeviceNameList.add(btDevice.getName());

        btListAdapter.notifyDataSetChanged();
    }


    @Override
    public void onScanFailed(int errorCode)
    {
        Log.e(LOGTAG, "BT scan error: " + errorCode);
    }
};

1 Ответ

0 голосов
/ 14 июня 2018

Я встречал тот же случай, с которым вы сталкиваетесь.Если вы используете Android 6.0 или выше, чем.Вы должны запросить разрешение на местоположение во время выполнения.После получения адаптера Bluetooth, давайте вставим строку кода, как показано ниже, чтобы запросить разрешение на местоположение.Когда ваше приложение запустится, появится диалоговое окно с вопросом, согласны ли вы поделиться своим местоположением.

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1001);
...