目录

首先说下蓝牙4.0

目前android蓝牙有2种:

ble蓝牙开发流程:

1、首先当然是进行权限申请啦:

2、获取蓝牙适配器 BluetoothAdapter

3、打开蓝牙

4、关闭蓝牙

5、在onActivityResult中获取打开蓝牙结果 (蓝牙的状态也会通过广播方式返回)

6、成功打开蓝牙后就可以进行蓝牙的扫描操作了

7、接下来就是关闭扫描蓝牙 其5.0之后也是有变化

8、连接蓝牙准备


7、接下来就是关闭扫描蓝牙 其5.0之后也是有变化


首先说下蓝牙4.0 

蓝牙 4.0 是 2012 年最新蓝牙版本,是 3.0 的升级版本;较 3.0 版本更省电、成本低、3 毫秒低延
迟、超长有效连接距离、AES-128 加密等。 
蓝牙 4.0 最重要的特性是省电,极低的运行和待机功耗可以使一粒纽扣电池连续工作数年之久。
此外,低成本和跨厂商互操作性,3 毫秒低延迟、AES-128 加密等诸多特色,可以用于计步器、心律
监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。 
模块做为智能手机外设的桥梁,使得主机端应用开发异常简单。在桥接模式下(串口), 用户的
现有产品或者方案配合此透传模块,能十分方便地和移动设备(需支持蓝牙 4.0)相互通讯,实现超强
的智能化控制和管理(抄写于BLE4.0贴片模块手册)

目前android蓝牙有2种:

1)蓝牙2.0

传统蓝牙适用于电池使用强度较大的操作,例如 Android 设备之间的流式传输和通信等

当然速度也比较快 (128byte/5ms 这是理想速度)

Android Developer中也有比较详细的教程:

蓝牙|Android Developers

2) 蓝牙4.0 Ble

因为是低功耗的蓝牙 所以其传输速度也是慢很多 它的速度可设置 一般默认为连接间隔为 20 ms 每个无线包最大载荷为 20 个字节。也就是说 理想速度为20byte/20ms 实际上其传输速度是会变化的 (20byte/30ms~到20byte/50ms之间)

当然Android Developer中也有教程但是没有中文的:

BLE|Android Developers

ble蓝牙开发流程:

1、首先当然是进行权限申请啦:

在AndroidManifest 中添加

    <uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> //蓝牙设置 、扫描

Android 6.0后面版本需要添加位置权限才可扫描到设备

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

Android10(Q)扫描需要打开位置信息 不然扫描不到蓝牙

官方的提示

位置权限为私密权限6.0后需要动态申请(我使用RxPermissions 申请权限)

public void requestMustPermissionsEach(String permission, OnPermissionListener listener) {mRxPermissions.requestEach(permission).subscribe(permission1 -> {if (listener != null) {if (permission1.granted) {// 'permission' 授权通过!} else if (permission1.shouldShowRequestPermissionRationale) {//拒绝 没有点击不再提醒} else {//拒接 点击不在提醒}}});}

在AndroidManifest 中声明应用只支持蓝牙4.0

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

或者在代码中进行判断

if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();finish();
}

2、获取蓝牙适配器 BluetoothAdapter

BluetoothAdapter mBleAdapter = BluetoothAdapter.getDefaultAdapter();

3、打开蓝牙

public void openBle() {if (!mBleAdapter.isEnabled()) {Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);//REQUEST_ENABLE_BT 是设置 requestCode 以便在onActivityResult判断为蓝牙打开结果startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);}}

4、关闭蓝牙

 public void closeBle() {if (mBleAdapter != null) {mBleAdapter.disable();}}

5、在onActivityResult中获取打开蓝牙结果 (蓝牙的状态也会通过广播方式返回)

@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);//打开蓝牙成功if (requestCode == BleSearchPresenter.REQUEST_ENABLE_BT && resultCode == Activity.RESULT_OK) {//执行蓝牙打开后的操作}}

6、成功打开蓝牙后就可以进行蓝牙的扫描操作了

在 5.0 后有新的扫描方法 在之前的被弃用了 (官方不推荐使用)

5.0之前的扫描方式

  public void startSearchBle() {if (!mBleAdapter.isEnabled()) {openBle();return;}//暂停扫描需要用到mLeScanCallback 所以定义为全局变量 扫描结果在此回调mLeScanCallback = (device, rssi, scanRecord) -> {//device 为扫描到的蓝牙设备属性//rssi 为扫描到蓝牙信号//scanRecord 扫描结果的列表String BleMac =  device.getAddress();//蓝牙物理地址 连接蓝牙是会用到String BleName = device.getName();//蓝牙名称};mBleAdapter.startLeScan(mLeScanCallback);}

5.0之后的扫描方式

public void startSearchBle() {if (!mBleAdapter.isEnabled()) {openBle();return;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {mBleScanner = mBleAdapter.getBluetoothLeScanner();mScanCallback = new ScanCallback() {@Overridepublic void onScanResult(int callbackType, ScanResult result) {super.onScanResult(callbackType, result);//扫描结果的返回//获取蓝牙设备BluetoothDevice btDevice = result.getDevice()//获取蓝牙信号int rssi = result.getRssi()}@Overridepublic void onBatchScanResults(List<ScanResult> results) {super.onBatchScanResults(results);}@Overridepublic void onScanFailed(int errorCode) {super.onScanFailed(errorCode);}};mBleScanner.startScan(mScanCallback);}
}

7、接下来就是关闭扫描蓝牙 其5.0之后也是有变化

5.0之前

public void stopSearchBle() { if (mLeScanCallback != null) {mBleAdapter.stopLeScan(mLeScanCallback);mLeScanCallback = null;}
}

5.0之后

 public void stopSearchBle() {if (mBleScanner != null && mScanCallback != null) {mBleScanner.stopScan(mScanCallback);mScanCallback = null;}
}

8、连接蓝牙准备

1)需要蓝牙的物理地址进行连接蓝牙

蓝牙的物理地址可通过蓝牙扫描时 获得的device 中获取mac地址

下一步、连接

9、推荐蓝牙框架:

FastBle

Android BLE蓝牙4.0开发 实现扫描、连接、通讯、获取通知、特性等 (一、打开蓝牙 进行扫描)相关推荐

  1. iOS开发之蓝牙4.0开发使用

    转载自https://www.jianshu.com/p/f0e4b0e98336 2015年的时候自己写过一个蓝牙4.0项目,当忘了写博客,最近看到这篇博客写的挺详细,所以转载一下 一: 介绍 蓝牙 ...

  2. iOS 蓝牙4.0开发使用(内附Demo)

    一: 介绍 近几年,智能设备越来越火,这些智能设备中,有很大一部分是通过手机来控制硬件设备,来达到预期的效果,这中间少不了要使用到蓝牙功能,通过蓝牙来通信来控制设备. 蓝牙分为蓝牙2.0和蓝牙4.0. ...

  3. VB6.0开发的计算机串口通讯程序1

    VB6.0开发的计算机串口通讯程序1 下面介绍几个使用VB6.0开发的计算机串口通讯程序,这些程序可以自动发送16进制字符,并接收这些字符.这些程序可以在链接: 链接: https://pan.bai ...

  4. Android BLE蓝牙4.0开发详解

    这篇博客主要讲解 蓝牙 BLE 的用法.在讲解之前先讲一些概念性的东西,对于之前没接触过蓝牙开发,现在手上又有个蓝牙BLE项目需要做的人,先看下这些概念还是很重要的.因为我之前就是这样,之前没有接触过 ...

  5. Android蓝牙4.0开发及发送指令到蓝牙硬件设备,简单好用,方法已写好直接可用

    近日,接到需要用到蓝牙解锁硬件设备的新需求,开发过程中呢也遇到许多硬件的坑,开发协议文档较简单,几句话就完了,第一次搞得我自己一脸懵逼,本来一两个小时就能写完并测试完成的过程用了两三天.哎!默默地回到 ...

  6. 蓝牙4.0android开发,Android蓝牙4.0开发

    添加蓝牙权限 特性请求 值为true则指定设备必须带BLE才能安装该应用程序 值为false则不论设备是否带BLE都可以安装应用程序(但运行时必须判断设备是否支持该特性 判断设备是否支持BLE(如果特 ...

  7. 基于经典蓝牙的安卓蓝牙APP开发(基于蓝牙2.0开发,例:HC-05)

    基于经典蓝牙的安卓蓝牙开发-串口 一.展现广播的三种方式 1.通知: 2.对话框: 3.消息提示框 2.在使用Android蓝牙适配器中的startDiscovery需要先打开定位服务 3.在连接蓝牙 ...

  8. iOS 蓝牙 4.0 开发

    随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,如今的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大降低.从iOS的发展史也不难看出 ...

  9. iOS 蓝牙4.0开发

    1. 什么是蓝牙 4.0 ?   全新的蓝牙4.0技术并不是一种技术,而是由传统蓝牙,高速蓝牙和低功耗蓝牙合而为一.并且这三种蓝牙可以组合使用,也可以单独使用.其中,低功耗蓝牙即BLE是蓝牙4.0的核 ...

最新文章

  1. php 7.1 寿命,PHP 7.1新特性
  2. Android 保存图片到系统及相关问题的解决方案
  3. Error: cmd: Command failed with exit code ENOENT
  4. 代码里无图片地址_项目实战:爬高清图片
  5. [Spring+Hibernate系列]1.Spring+Hibernate 框架搭建
  6. python调用数据库存储过程_python调用MySql存储过程
  7. 用video标签流式加载
  8. 【个人笔记】OpenCV4 C++ 快速入门 23课
  9. css 设置input输入内缩进
  10. XJTU_选课小助手
  11. 【Linux】 Debian 系 Linux 安装搜狗输入法
  12. 计算机英特尔显卡在哪找,英特尔®显卡和 Windows 7 * 常见问题解答
  13. 计算机绘图课程选用课本,机械制图与计算机绘图 机械制图与计算机绘图 机械制图与计算机绘图课程标准.doc...
  14. 中国富豪第一桶金挖掘的九大方式
  15. 万国觉醒信号进爆满服务器,游漫谈:《万国觉醒》冷知识,玩家纷纷联盟,千人同屏硬刚服务器...
  16. Unity 3D模型动画导出为帧序列
  17. 苹果Swift编程语言入门教程【中文版】
  18. JAVA使用jcifs读取共享文件夹(SMB1,SMB2协议)
  19. 丁苯嵌段共聚物的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. fedora 非root账户无法登陆图形界面

热门文章

  1. 清华大学c语言程序设计教程下载,清华大学出版社-图书详情-《C语言程序设计教程》...
  2. 学校校园学生信息管理系统 毕业设计毕业源码毕业论文开题报告参考(3)上课老师功能
  3. lg g3 com.Android,毫秒级激光辅助对焦 2K屏幕LG G3评测
  4. Tabulator 交互式数据表格 javascript 库示例
  5. springboot根据模板生成pdf文件
  6. 高压放大器使用函数波产生器当输入时的工作原理是什么?
  7. ssm生鲜超市管理系统的设计与实现 毕业设计-附源码261635
  8. html设置 字体样式 face
  9. POJ 6264:走出迷宫
  10. 实战经验!视觉设计师进阶指南17条-20140104早读课