之前做 Ble 开发都是在 Android 6.0 系统以下的版本中进行测试的,今天使用 Android 6.0 的设备测试的时候,发现扫描不到周围的 Ble 设备。后来发现 6.0 需要在应用运行过程中请求位置权限,并且还要打开位置。

动态申请位置权限 ACCESS_COARSE_LOCATION

在 AndroidManifest.xml 文件中加入

然后在程序运行过程中进行申请

private static final int REQUEST_CODE_ACCESS_COARSE_LOCATION = 1;

...

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)) {

showToast("自Android 6.0开始需要打开位置权限才可以搜索到Ble设备");

}

//请求权限

ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},

REQUEST_CODE_ACCESS_COARSE_LOCATION);

}

}

执行完上面的请求权限后,系统会弹出提示框让用户选择是否允许改权限。选择的结果可以在回到接口中得知:

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

if (requestCode == REQUEST_CODE_ACCESS_COARSE_LOCATION) {

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

//用户允许改权限,0表示允许,-1表示拒绝 PERMISSION_GRANTED = 0, PERMISSION_DENIED = -1

//permission was granted, yay! Do the contacts-related task you need to do.

//这里进行授权被允许的处理

} else {

//permission denied, boo! Disable the functionality that depends on this permission.

//这里进行权限被拒绝的处理

}

} else {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

}

}

以上就是如何在应用运行的过程中申请位置权限。做完上面你以为就 OK 了,但是可能你会发现,并没有什么卵用,依然不能搜索到周围的 Ble 设备,原因是可能的你的位置服务(定位 GPS)没有打开。

打开定位 (Location)

首先检查定位是否打开,可以像下面这样操作:

/**

* Location service if enable

*

* @param context

* @return location is enable if return true, otherwise disable.

*/

public static final boolean isLocationEnable(Context context) {

LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

boolean networkProvider = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

boolean gpsProvider = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

if (networkProvider || gpsProvider) return true;

return false;

}

如果定位已经打开,OK 很好,可以搜索到 ble 设备;如果定位没有打开,则需要用户去打开,像下面这样:

private static final int REQUEST_CODE_LOCATION_SETTINGS = 2;

...

private void setLocationService() {

Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

this.startActivityForResult(locationIntent, REQUEST_CODE_LOCATION_SETTINGS);

}

进入定位设置界面,让用户自己选择是否打开定位。选择的结果获取:

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == REQUEST_CODE_LOCATION_SETTINGS) {

if (isLocationEnable(this)) {

//定位已打开的处理

} else {

//定位依然没有打开的处理

}

} else super.onActivityResult(requestCode, resultCode, data);

}

OK,6.0 的系统对于用户的隐私保护更好了,但是对于开发者而言就是麻烦,但是那能咋办,撸码呗。

以上这篇Android 6.0 扫描不到 Ble 设备需开启位置权限的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

android10蓝牙搜不到ble设备_Android 6.0 扫描不到 Ble 设备需开启位置权限的方法相关推荐

  1. android10蓝牙搜不到ble设备_Android 蓝牙搜索不到设备(android M权限问题)

    今天早上做了一个android的App的一个蓝牙模块,刚开始使用了第三方的蓝牙操作库(为了偷懒)...调试的时候却发现一个问题,不论怎样都无法搜索到设备. 重新自己写一个操作库,一步一步检查, 蓝牙开 ...

  2. android10蓝牙搜不到ble设备_Android 6.0 蓝牙 找不到设备问题

    问题由来 公司有项目需要使用手机蓝牙配对蓝牙模块,但是在写代码调试中,发现无法搜索到蓝牙模块(有时可以搜索到),问题找了很长时间,确定没有代码上的问题,然后换了个华为低端手机,发现可以搜索到,证实了我 ...

  3. android10蓝牙搜不到ble设备_Android BLE程序在Android 10手机搜不到设备问题分析

    前言 前一阵帮别人做个蓝牙的Android程序,调试的好好的, 用的自己的老手机,android 5.1.8.0的都是好好的能够搜索,但是交付过去,对方的华为p30 Android 10手机就是不行, ...

  4. android 强制打开gps定位_Android 6.0 默认关闭定位和GPS,开启后默认选省电

    默认关闭定位和GPS 修改位置 frameworks/base/packages/SettingsProvider/res/values/defaults.xml network,gps 修改为 默认 ...

  5. Android扫描蓝牙问题,你是不是位置权限和GPS都打开了还是扫不出东西

    目录 看看你的问题是否一样 心历路程 解决办法 看看你的问题是否一样 首先你检查一下,你手机是不是把GPS打开了(Android10后搜索蓝牙要打开GPS),再看一下你的app在系统设置里面的位置权限 ...

  6. 扫描识别电子护照的设备机器SDK

    扫描识别电子护照的设备机器SDK 一.扫描识别电子护照的设备机器应用背景 海关在管理旅客出境.入境时,需要旅客出示有效身份证证件(身份证.电子护照.港澳通行证.军官证.驾驶证.回乡证.户口本等),相关 ...

  7. android easylink 搜索设备_Android BLE开发解析

    一.Ble蓝牙操作流程 蓝牙操作流程图 二.权限声明 1.在Android 6.0(targetSdkVersion小于23)之前在权限的获取和操作只需在AndroidManifest文件中声明这两个 ...

  8. win11笔记本电脑蓝牙搜不到设备,过几天又可以自己连上了,过久又搜不到

    win11笔记本电脑蓝牙搜不到设备,过几天又可以自己连上了,过久又搜不到,间歇性犯病. 问题如题所述. 打开设备管理器,找到蓝牙. 选这个,前面的 Realtek不一定是一样的有可能是intel什么的 ...

  9. android ble 设备扫描程序,Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备...

    本文将带你了解Android应用开发Android 7.0  BLE scan 问题:程序无错但扫描不到BLE设备,希望本文对大家学Android有所帮助. < 最近在做毕设,需要几周内从头学起 ...

最新文章

  1. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解
  2. Silverlight教程第三部分:使用 Networking取回数据并填充DataGrid
  3. 创建用于云支持的枢纽
  4. php爬虫:知乎用户数据爬取和分析
  5. Microsoft SQL Server 全角转半角函数
  6. 性能优化篇(4):千万别使用CSS表达式
  7. Windows Server 2008R2 Web服务器
  8. Java入门第37课——猜字母游戏之设计数据结构
  9. 字符串,列表,元组,字典基本函数
  10. PKU 1062 昂贵的聘礼
  11. 本泽马梅开二度瓦拉内染红 10人皇马4:2客胜西班牙人
  12. 2019上半年系统集成项目管理工程师真题与答案
  13. 获取 jquery 版本号
  14. 哈尔滨工业大学计算机科学与技术学院许博文,王轩-哈尔滨工业大学(深圳)计算机科学与技术学院...
  15. 纯CSS实现图片动画
  16. android Q HIDL(小屏显示)
  17. 07-HTML通用属性
  18. 语音合成工具Coqui TTS安装及体验
  19. gsyVideoPlayer点击/拖动进度条播放视频会回退
  20. 微信公众号软件 php,写公众号文章的软件有哪些?

热门文章

  1. Linux操作系统七大武器详解
  2. 用仿制图章工具增添建筑(每天一个PS小项目)
  3. VR全景制作之全景拍摄
  4. html 表格边框1像素,一像素边框表格的几种实现方法
  5. 练习|python格式化符号
  6. Python之探索式数据分析
  7. android 4.4 art模式,从未如此流畅 Android 4.4 ART模式体验
  8. Java学习笔记-Day64 Spring 框架(二)
  9. 赛事分享:四川省大学生飞行器挑战赛实践第一,铁道游击队!
  10. 滴滴云服务器的注册与快速配置教程