BLE 始终扫描不到蓝牙

背景

基于公司业务,APP 需要集成蓝牙的扫描,连接,订阅通知等。

遇到问题

码好代码,运行,发现蓝牙始终徘徊在

扫描 > 扫描结束 (timeout)

各种查阅资料后,找到根本原因:

android 6.0之后要用蓝牙还需要添加一个模糊定位的权限

1
android.permission.ACCESS_COARSE_LOCATION

解决问题

  • 只需要在扫描 BLE 设备之前动态向用户申请位置权限

    我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//如果 API level 是大于等于 23(Android 6.0) 时
//判断是否具有权限
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
//判断是否需要向用户解释为什么需要申请该权限
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
Toast.makeText(this, "自Android 6.0开始需要打开位置权限才可以搜索到Ble设备", Toast.LENGTH_SHORT).show();
}
//请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
REQUEST_CODE_ACCESS_COARSE_LOCATION);
}
}

结果

问题解决。

-------------------本文结束 感谢您的阅读-------------------