笔者前段时间做了一个功能,需要对接一个蓝牙设备,该蓝牙设备使用的就是BLE蓝牙。这里给大家分享一下我的实现。这篇文章主要是实现程序与BLE蓝牙设备的连接,交互和设置、测试工具等请期待下一篇文章。...// Android5.0新增的扫描API,扫描返回的结果更友好,比如BLE广播数据以前是byte[] scanRecord,而新API帮我们解析成ScanRecord...mScanCallback是我们的结果返回类,开始扫描和停止扫描都需要用到它。...(rulerService) isSearchDev=true bluetoothLeScanner.stopScan(this) //停止扫描...到此,我们就获取到了附近所有的使用BLE蓝牙的设备的设备信息。至于如何交互?如何筛选BLE蓝牙设备的指定权限服务?笔者会在下篇一一道来,并且会上传一个笔者做的蓝牙测试工具。
如果没有这些权限, 扫描将不会返回任何结果。...因为扫描非常消耗电量,你应当遵守以下准则: 只要找到所需的设备,停止扫描。 不要在循环里扫描,并且对扫描设置时间限制。以前可用的设备可能已经移出范围,继续扫描消耗电池电量。...下面代码显示了如何开始和停止一个扫描: /** * 扫描和显示可以提供的蓝牙设备 */ public class DeviceScanActivity extends ListActivity {...作为BLE扫描结果的接口,下面是BluetoothAdapter.LeScanCallback的实现。...BLE 设备或者扫描传统蓝牙设备,不能同时扫描 BLE 和传统蓝牙设备。
查找 BLE 设备 (1) 查找所有的 BLE 设备 查找 BLE 设备 : -- 查找方法参数 : 为了搜索到 BLE 设备, 调用 BluetoothAdapter 的 startLeScan()...中断策略 : 只要一发现蓝牙设备, 马上中断扫描. -- 不循环策略 : 不要循环扫描, 设置一个扫描的最大时间限制....private void scanLeDevice(final boolean enable) { if (enable) { // 在一个预先定义的时间段后停止扫描...扫描回调接口 : -- 接口作用 : BluetoothAdapter.LeScanCallback 实现类, 在这个实现类的接口中返回 BLE 设备扫描结果; -- 源码示例 : private...设备扫描类型 : 蓝牙设备扫描 在同一个时间扫描时, 只能扫描 BLE 设备 或者 SPP 设备中的一种, 不能同时扫描两种设备. 7.
而使用BLE库,我们可以直接通过蓝牙设备的UUID进行连接(通过GATT服务),在当前应用内就能直接连接了。而不用通过系统设置。...也就是说这个方法中会触发多次回调, 所以建议,在扫描到我们的蓝牙设备之后,主动调用scanner.stopScan(callback);停止扫描。 PS:这种查找方式,不会触发蓝牙的遍历广播。...我们如果开启广播进行监听设备扫描情况。如果通过startScan方法,广播中不会有回调。 上面是一个通用搜索模式,我们还可以配置自己的过滤条件。...(); //停止扫描 } //查找蓝牙 bluetoothAdapter.startDiscovery(); 我们可以直接使用bluetoothAdapter进行扫描。...同时一个蓝牙设备对象,可能有多种服务功能。 如果不想自己写线程变量轮询设备发送过来的消息,就通过注册消息监听。让BLE框架帮我们进行轮询之后,再通知到我们。
角色和责任 以下是Android设备与BLE设备交互时的角色和责任: *中央 VS 外围设备。 适用于BLE连接本身。中央设备扫描,寻找广播;外围设备发出广播。...但是你可以自己设计android app去扮演GATT服务端角色 设备对BLE的支持 分为两种情况 * 目标设备是否支持BLE * Android手机是否支持BLE 目标设备是否支持要看具体目标设备的情况...BluetoothAdapter代表设备本身的蓝牙适配器(蓝牙无线)。整个系统只有一个蓝牙适配器,而且你的app使用它与系统交互。...这个方法需要一个参数BluetoothAdapter.LeScanCallback。你必须实现它的回调函数,那就是返回的扫描结果。...因为扫描非常消耗电量,你应当遵守以下准则: *只要找到所需的设备,停止扫描。 *不要在循环里扫描,并且对扫描设置时间限制。以前可用的设备可能已经移出范围,继续扫描消耗电池电量。
Android BLE相关类 BluetoothAdapter:Android设备的蓝牙适配器,可执行基本的蓝牙任务,如启动、停止设备发现,查询已配对设备,获取蓝牙适配器状态,使用MAC地址实例化蓝牙设备类...扫描BLE设备 开始扫描 使用方法boolean startLeScan (BluetoothAdapter.LeScanCallback callback),但该方法在API 21中已过时,若应用的目标版本超过...停止扫描 使用方法void stopLeScan (BluetoothAdapter.LeScanCallback callback)停止扫描,需传入开启扫描时的callback对象。!!!...搜索设备非常地消耗资源,当搜索到所需设备后,请立即停止扫描操作。...也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播。 7.
需要的安卓权限,相信大家对各种APP首次打开的权限确认弹窗应该不会陌生。...设置BLE BLE的开发第一步骤就是设置BLE 为什么要设置BLE,因为我们在使用BLE进行通讯之前,需要验证设备是否支持BLE或者检查BLE是否开启。...} BLE扫描 与BLE设备通讯,首先需要扫描出附近的BLE设备,我们先看看Java怎么实现的 JAVA 代码 /** * Activity for scanning and displaying...(leScanCallback); } ... } ... } 扫描设备需要使用bluetoothAdapter.startLeScan方法,并指定一个BluetoothAdapter.LeScanCallback...,所以示例代码通过runOnUiThread设置扫描进程在设备的前台运行,扫描到设备后触发leScanCallback 回调,然后通过私有的LeDeviceListAdapter字段保存扫描到的设备列表
之前做 Ble 开发都是在 Android 6.0 系统以下的版本中进行测试]的,今天使用 Android 6.0 的设备测试的时候,发现扫描不到周围的 Ble 设备。...Manifest.permission.ACCESS_COARSE_LOCATION)) { showToast("自Android 6.0开始需要打开位置权限才可以搜索到Ble...设备"); } //请求权限 ActivityCompat.requestPermissions(this, new String...做完上面你以为就 OK 了,但是可能你会发现,并没有什么卵用,依然不能搜索到周围的 Ble 设备,原因是可能的你的位置服务(定位 GPS)没有打开。...设备;如果定位没有打开,则需要用户去打开,像下面这样: private static final int REQUEST_CODE_LOCATION_SETTINGS = 2; ... private
在Android 6.0以后的系统BLE scan需要申请location的相关权限才能支持BLE的一些功能,比如发现附近的beacons设备。 这是开发的时候必须用到的权限,并非权限滥用。...然后还有一个开始扫描和停止扫描的方法。...BluetoothLeScannerCompat.getScanner(); scanner.startScan(scanCallback); } /** * 停止扫描设备...运行之后点击开始扫描按钮,就会扫描附近的低功耗蓝牙设备,(请在附近有已打开低功耗蓝牙时进行扫描)可以在日志栏处进行打印。 ? 这里很明显,扫描到了一些蓝牙设备,并且很多设备没有设备名称。...五、连接设备 连接Ble设备其实也很简单,难的是连接之外的东西,先来构想一下连接功能的业务逻辑,点击设备列表中的设备,进行连接,先显示一个加载布局,表示现在正在连接,然后停止扫描,在根据设备的mac
第一步:判断设备是否支持BLE功能 第二步:通过蓝牙管理器获取蓝牙适配器 第三步:判断设备是否打开蓝牙 在MainActivity.java中添加以下代码: public boolean initialize...); startActivityForResult(enableBtIntent, 1); } return true; } 3.扫描设备实现...本作者时间扫描设备添加到Spanner控件中,在MainActivity.java中添加以下代码: 第一步:编写扫描函数 第二步:添加扫描回调函数 private void scanLeDevice...)) { mSearchBluetoothList.add(device); mBLENameList.add(device.getName()); } } } }); } }; 4.将扫描到的设备添加到...(ListAdapter); } 5.连接设备 在Spanner控件中选择要连接的设备,Spanner的选择事件实现,在MainActivity.java中添加以下代码: @Override public
本文已授权微信公众号>独家发布 ONE,传统蓝牙 BluetoothAdapter:本地蓝牙设备适配器,用于管理蓝牙的开启/关闭、重命名、扫描、配对、连接 BluetoothClass...:对已配对设备可见,具有扫描功能 *BluetoothAdapter.SCAN_MODE_NONE:对所有设备不可见,不具有扫描功能 *BluetoothAdapter.SCAN_MODE_CONNECTABLE...(); 开启扫描/关闭扫描 adapter.startDiscovery();//开启蓝牙扫描功能 adapter.cancelDiscovery();//关闭蓝牙扫描功能 在扫描到设备时系统会发送...uuid必须相同 TWO,BLE低功耗蓝牙 获取蓝牙适配器的步骤同上,扫描ble设备的方法如下: //开启蓝牙扫描 mBluetoothAdapter.startLeScan(mLeScanCallback...//扫描到设备后回调 } 扫描到设备后可以进行连接,方法如下 mBluetoothGatt = mBluetoothDevice.connectGatt(BluetoothCODAService.this
——《微卡智享》 本文长度为3150字,预计阅读8分钟 前言 距上篇文章发布都一个多月了,先声明,我可不会停更。...此外,BLE还可以与多种设备相连,而且还可以使用广播模式来发送信息,如心率检测仪,健身设备等。...蓝牙BLE有两个角色,分别是中心设备和外围设备 外围设备:指功耗更低的设备,会不断地发出广播,直到与中心设备连接 中心设备:可以进行扫描,寻找外设广播,并从广播中拿到数据 广播与连接 上面说到外围设备来发出广播...后面我的Demo中主要也是连接后通过Characteristic进行数据的通信, Android BLE中的几个关键类 # 类名 说明 1 BluetoothAdapter 映射了设备的蓝牙模块,通过BluetoothManager...来获取,但其最终还是调用BluetoothAdapter.getDefaultAdapter()获取的 2 BluetoothLeScanner 扫描和停止扫描的类,常用方法startScan和stopScan
BLE开发需要Android 4.3 (API level 18) 及以上 一.添加权限 为了能正常使用蓝牙相关功能(扫描等),首先需要添加以下权限: <uses-permission android..., Toast.LENGTH_SHORT).show(); finish(); } 三.扫描蓝牙设备 BLE设备的扫描由BluetoothManager对象提供方法来实现,有两个扫描方法:...; } 第二个方法允许我们提供特定的UUID,来扫描特定的设备,扫描结果通过BluetoothAdapter.LeScanCallback接口回调给我们: public interface LeScanCallback...设备 在扫描出设备以后,我们一般会选择某个扫描出来的设备,通过其地址获取一个远程的蓝牙设备对象。...代表具体的某个BLE设备,每个设备可能有不同之处,例如数据解析方式等。
如果没有配对,就进行配对 配对程序如下,在进行配对时首先检查远程设备是否正在配对,如果是,就返回true,如果没有在配对就现将本机的蓝牙配对状态设为true表示正在配对,紧接着停止蓝牙的扫描操作,与远程设备进行配对...开启扫描:BluetoothAdapter----startDiscovery(). 停止扫描:BluetoothAdapter----cancelDiscovery()....判断是否正在扫描:BluetoothAdapter----isDiscovery()....扫描低功耗BLE蓝牙设备:BluetoothAdapter----startLeScan(mLeScanCallBack)....停止对BLE设备的扫描:BluetoothAdapter----stopLeScan(mLeScanCallBack). ii>,各种广播相关参考网址,这是一个API在线文档,解释的很清楚 http:/
然而实验发现 BluetoothAdapter.startDiscovery是可以同时发现经典蓝牙和ble的 低功耗蓝牙:低功耗蓝牙中则有一个主设备(Central)和从设备(Peripheral,也叫外围设备...总结:BluetoothAdapter.startDiscovery在大多数手机上是可以同时发现经典蓝牙和Ble的,但是startDiscovery的回调无法返回Ble的广播,所以无法通过广播识别设备,...且startDiscovery扫描Ble的效率比StartLeScan低很多。...注意:当两种蓝牙设备被某设备(包括当前的设备)配对/绑定后,可能不会再被扫描到。 2. 配对/绑定 有很多小伙伴都不太理解配对和绑定究竟有什么区别,或者它们根本就是同一个东西。...具体建立GATT连接的顺序则是,首先通过BluetoothAdapter的getRemoteDevice(address)方法获取大相应BLE从设备的BluetoothDevice,其中的address
1、不能使用BluetoothAdapter.startLeScan(UUID[] serviceUuids, LeScanCallback callback)函数扫描自定义UUID的蓝牙模块。...app连接好之后会执行,而且相关蓝牙的服务在此可以获取bluetoothGatt.discoverServices();本人认为,由于没有产生连接所以不会返回蓝牙服务,所以BluetoothAdapter.startLeScan...如果同时对多个蓝牙设备发起建立 Gatt 连接请求。如果前面的设备连接失败了,后面的设备请求会被永远阻塞住,不会有任何连接回调。...5、Android 作为中心设备,最多只能同时连接 6 个 BLE 外围设备(可能不同的设备这个数字不一样),超过 6 个,就会连接不上了。...现在 BLE 设备越来越多,其实并不够用,所以在开发的过程中,需要特别的谨慎使用。
示例代码 外围设备 中央设备 开始 接下来我们就准备开始实际操作了,首先我们准备2台手机,手机A作为中央设备,手机B作为外围设备,在打开B手机的ble广播后,我们使用A手机进行打开蓝牙-->扫描-->连接...扫描是一个非常耗电的操作,因此当我们找到我们需要的设备后应该马上停止扫描。...().startLeScan(uuids,mLeScanCallback); } //停止扫描 private void stopScan(){ BluetoothManager...//result:扫描到的设备数据,包含蓝牙设备对象,解析完成的广播数据等 } }; //停止扫描 private void stopNewScan(){...2.不管是新旧API的扫描结果回调都是不停的回调扫描到的设备,就算是相同的设备也会重复回调,直到你停止扫描,因此最好不要在回调方法中做过多的耗时操作,否则可能会出现这个问题,如果需要处理回调的数据可以把数据放到另外一个线程处理
这两天在研究蓝牙,网上有关蓝牙的内容非常有限,Github上的蓝牙框架也很少很复杂,为此我特地写了一个最最简单的DEMO,实现BLE蓝牙接收数据的问题, 不需要什么特定的UUID, 不需要什么断开重连,...2.修改代码中的“你想要接收数据的已配对设备名称”为你真实的蓝牙设备 3.复制粘贴下面的代码,日志TAG是“BLE” 代码: import android.bluetooth.BluetoothAdapter...java.util.Set;import java.util.UUID; public class MainActivity extends AppCompatActivity { private BluetoothAdapter...adapter.isEnabled()) { adapter.enable(); } startScan(); } //开始扫描 private
>蓝牙类别与简介 BLE设备分单模和双模两种,双模简称BR,商标为Bluetooth Smart Ready,单模简称BLE或者LE,商标为Bluetooth Smart。...它应用场景广,可以想想,现在的智能家居,智能音箱,智能手表等等物联网设备,大多数通过BLE进行配网和数据交互。...一、低功耗蓝牙介绍 开发步骤如下: 获取BluetoothAdapter,然后扫描,获取蓝牙驱动Device,然后连接蓝牙驱动,监听连接回调,获取一个驱动Device下的所有不同功能的service...4.主从设备 Center(中心设备,主动连接的一方) Center主要可以分为 扫描->连接->通讯 三块内容. 通讯主要包含read,write,notify/indicate。...这样,当我们没有硬件设备的时候,可以拿2台手机进行BLE开发,很方便。
Ble蓝牙App(一)扫描 前言 关于低功耗的蓝牙介绍我已经做过很多了,只不过很多人不是奔着学习的目的去的,拿着源码就去运行,后面又发现连接设备后马上断开,然后不会自己看问题,这个现象就是快餐式的,...二、扫描准备 下面在com.llw.goodble包下新建一个ble包,里面我们需要创建一些类来处理扫描的相关事务,首先在ble包下创建一个BleCore类,里面先不写内容,然后我们在ble包下新建一个...,开始和停止扫描的方法处理。...核心类的初始化,顺便完成对于Ble扫描类的初始化。...,在扫描则停止,同时显示对应的布局。
领取专属 10元无门槛券
手把手带您无忧上云