首页 文章

在Android Things上禁用位置服务

提问于
浏览
0

当试图在Android Things上运行BLE Indoor Positioning演示应用程序(使用NXP i.MX7D Developer Kit)时,我得到 Bluetooth scanning error: Location Services disabled (code 4) .

E/BluetoothClient: Bluetooth scanning error: Location Services disabled (code 4)
W/System.err: com.polidea.rxandroidble.exceptions.BleScanException: Location Services disabled (code 4)
W/System.err:     at com.polidea.rxandroidble.internal.scan.ScanPreconditionsVerifierApi18.verify(ScanPreconditionsVerifierApi18.java:31)
W/System.err:     at com.polidea.rxandroidble.internal.scan.ScanPreconditionsVerifierApi24.verify(ScanPreconditionsVerifierApi24.java:38)
W/System.err:     at com.polidea.rxandroidble.RxBleClientImpl$1.call(RxBleClientImpl.java:114)
W/System.err:     at com.polidea.rxandroidble.RxBleClientImpl$1.call(RxBleClientImpl.java:111)
W/System.err:     at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
W/System.err:     at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
W/System.err:     at rx.Observable.subscribe(Observable.java:10352)
W/System.err:     at rx.Observable.subscribe(Observable.java:10319)
W/System.err:     at rx.Observable.subscribe(Observable.java:10227)
W/System.err:     at com.nexenio.bleindoorpositioningdemo.bluetooth.BluetoothClient.startScanning(BluetoothClient.java:79)
W/System.err:     at com.nexenio.bleindoorpositioningdemo.HomeActivity.onResume(HomeActivity.java:108)
W/System.err:     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1355)
W/System.err:     at android.app.Activity.performResume(Activity.java:7118)
W/System.err:     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3556)
W/System.err:     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3621)
W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2862)
W/System.err:     at android.app.ActivityThread.-wrap11(Unknown Source:0)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
W/System.err:     at android.os.Looper.loop(Looper.java:164)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6494)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

该应用程序使用RxAndroidBle来处理Android的蓝牙堆栈 . 它还在清单中声明了这些权限:

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

据我所知,Android Things应该在安装时或重启后自动授予这些权限 .

我不知道如何手动或以编程方式启用位置服务 .

1 回答

  • 4

    问题不在于权限 . RxAndroidBle库对位置服务进行了一些假设,这些假设不是由用户实际控制的 . 磁带库检查失败的原因是因为 NETWORK_PROVIDER 未启用,并且只有在注册了GPS驱动程序时才启用 GPS_PROVIDER . 但是,您实际上并不需要其中任何一个进行BLE扫描 .

    幸运的是,看起来RxAndroidBle的作者最近更改了代码以验证是否启用了位置模式设置 . 此检查将传递给Android Things,因此在您的情况下,您可能只需要将库依赖项更新为1.5:

    dependencies {
        ...
        implementation "com.polidea.rxandroidble:rxandroidble:1.5.0"
    }
    

相关问题