美文网首页
Android 蓝牙搜索不到设备(android M权限问题)

Android 蓝牙搜索不到设备(android M权限问题)

作者: Super_圣代 | 来源:发表于2017-05-22 17:34 被阅读0次

今天早上做了一个android的App的一个蓝牙模块,刚开始使用了第三方的蓝牙操作库(为了偷懒)。。。调试的时候却发现一个问题,不论怎样都无法搜索到设备。
重新自己写一个操作库,一步一步检查,
蓝牙开启,权限加了,广播注册没有问题,和以前写的蓝牙模块也没什么区别啊。
What? 木有问题啊,为什么搜索不到设备呢,换了两部手机一样不行。

经过一番思考后,突然想起android从6.0开始一些权限需要动态注册,可能是这个问题。

参照Android 6.0新特性

果不其然,果然是动态权限注册的问题。
首先蓝牙操作都需要在Manifest中注册两个权限
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/>
其次在API 23及以上的版本都需要动态权限注册

而蓝牙则需要动态添加这两条权限

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

动态权限的注册方法
(这里用了第三方的动态权限注册库 AndPermission
具体实现代码可以这样

        AndPermission.with(this)
                .permission(Manifest.permission.ACCESS_COARSE_LOCATION , Manifest.permission.ACCESS_FINE_LOCATION)
                .callback(new PermissionListener() {
                    @Override
                    public void onSucceed(int requestCode, @NonNull List<String> grantPermissions) {
                      ///权限注册成功时
                    }

                    @Override
                    public void onFailed(int requestCode, @NonNull List<String> deniedPermissions) {
                        MainActivity.this.finish();///注册失败时
                    }
                })
                .start();

ok完事,次饭!
Wi-Fi搜索设备也需要定位权限,且开启定位。

相关文章

网友评论

      本文标题:Android 蓝牙搜索不到设备(android M权限问题)

      本文链接:https://www.haomeiwen.com/subject/nbhixxtx.html