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

今天早上做了一个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 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,285评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,232评论 4 61
  • //在下面写出控件的基本属性 - (void)viewDidLoad { [super viewDidLoad];...
    雷仔阅读 330评论 0 0
  • 剛爬樓看完蛻變營群裡的聊天,大家各抒己見,互相探討和交流修行心得,我通過這些同修學到了很多,非常感恩!修行和讀書一...
    静心_安心阅读 280评论 0 1
  • 在你继续进行下一步行动之前,再仔细读读下面的这些步骤: 1.要明确你心中想要得到的钱的数目。仅仅说“我想要很多钱”...
    云十阅读 467评论 0 0