Android Things蓝牙乐权限

时间:2018-01-17 02:58:35

标签: android-studio bluetooth-lowenergy

我正在尝试在Android Studio中调试Android Things BLE应用。我试图在我的主活动线程上进行简单的扫描,但我一直得到这个例外:

01-17 02:13:24.735 29032-29044/com.dv.iotitag 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
                                                        at android.os.Parcel.readException(Parcel.java:2004)
                                                        at android.os.Parcel.readException(Parcel.java:1950)
                                                        at android.bluetooth.IBluetoothGatt$Stub$Proxy.startScan(IBluetoothGatt.java:920)
                                                        at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.onScannerRegistered(BluetoothLeScanner.java:442)
                                                        at android.bluetooth.le.IScannerCallback$Stub.onTransact(IScannerCallback.java:56)
                                                        at android.os.Binder.execTransact(Binder.java:697)

我在清单中拥有权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dv.iotitag">

<uses-feature android:name="android.hardware.bluetooth_le" />

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.things.permission.MANAGE_INPUT_DRIVERS" />
<uses-permission android:name="com.google.android.things.permission.MANAGE_BLUETOOTH" />

<application>
    <uses-library android:name="com.google.android.things" />

    <service
        android:name="com.dv.androidthings.ble.common.BluetoothLeService"
        android:enabled="true" />

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.IOT_LAUNCHER" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

但我仍然在调试模式下获得异常。我做错了什么?

2 个答案:

答案 0 :(得分:0)

从API 23(Android 6.0)开始,仅在Manifest.xml中声明权限是不够的。您必须按照here所描述的那样在运行时请求它们。

答案 1 :(得分:0)

转到手机内的应用程序,并确保已启用位置并将其打开。

在您的oncreate方法调用中: checkPermission();

public void checkPermission() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // } else { ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,}, 1); } } }

相关问题