BLE编程中关键步骤

获取权限

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

获取蓝牙适配器的实例

final BluetoothManager bluetoothManager =
        (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();

BLE搜索:实例化回调函数->启动/停止扫描

1、实例化回调函数

private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {
        runOnUiThread(new Runnable() {
           @Override
           public void run() {
               //得到蓝牙设备实例
           }
       });
   }
};

2、启动/停止扫描

mBluetoothAdapter.startLeScan(mLeScanCallback);  //开始扫描
mBluetoothAdapter.stopLeScan(mLeScanCallback);  //停止扫描

BLE连接:实例化回调函数 -> 连接并绑定回调函数

1、实例化回调函数

private final BluetoothGattCallback mGattCallback =
            new BluetoothGattCallback() {

         //当连接状态发生改变时会触发
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,
                int newState) {
            String intentAction;
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                 //当蓝牙设备已经连接
                 ...
            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                 //当设备无法连接
                 ...
            }
        }

         // 发现新服务时会触发
        @Override
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                ...
            } else {
                ...
            }
        }

         // 读写特性
        @Override
        public void onCharacteristicRead(BluetoothGatt gatt,
                BluetoothGattCharacteristic characteristic,
                int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                ...
            }
        }
     ...
    };

2、获取蓝牙设备实例,并连接该蓝牙设备实例。

//蓝牙地址实例化一个蓝牙设备,或通过上述扫描传入一个引用。
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);  
//涉及的三个参数:一个Context对象,自动连接(boolean值,表示只要BLE设备可用是否自动连接到它),和BluetoothGattCallback调用。
private BluetoothGatt mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
时间: 2024-11-02 11:23:55

BLE编程中关键步骤的相关文章

网络编程中的关键问题总结

总结下网络编程中关键的细节问题,包含连接建立.连接断开.消息到达.发送消息等等: 连接建立 包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接. accept接受连接的问题在本文最后会聊到,这里谈谈connect的关键点:     使用非阻塞连接建立需要注意:     connect/select返回后,可能没有连接上:需要再次确认是否成功连接: 步骤为: 使用异步connect直接连接一次,因为使用了非阻塞,函数立刻返回: 检查返回值,为0成功连接,否则加入到s

BLE简介和Android BLE编程

一.BLE和BT区别 其实我知道许多程序员不太喜欢阅读除了代码以外的文档,因为有时这些过于冗长的文档对编程并没有更多的好处,有了协议,接口,demo差不多很多人就能写出很好质量的代码了.但其实更深入的编程是少了阅读的,阅读文档可以解决很多编程中遇到的困难,比如在大数据大流量情况下,很多正常的程序会表现出不可靠的一面,这已经不是够编程能解决的了,硬件的配置,服务器带宽,使用的数据库,调用的接口都有可能是瓶颈.比如BLE,同样的蓝牙,但却有着本质区别,一个表现就是不是所有蓝牙设备都支持BLE,编程如

Android之BLE编程

写在前面: 作为一个程序员,各种苦逼啊,作为一个Android程序员,苦逼死了. Android手机可以使用WIFI.蓝牙和数据网络进行网络通信,那作为Android程序员,就必须得会这些了.如果不会,都不好意思给别人说你是21世纪的屌丝程序员. 通过WIFI和数据网络通信的Socket编程(基于IP的TCP.UDP.HTTP通信 )相信大家都是驾轻就熟了.而现阶段,随着物联网的发展和蓝牙的BLE低功耗方案的成熟,BLE设备应用越来越广泛,尤其是智能穿戴设备. 那么BLE编程是和怎么回事呢?到底

深入剖析Java编程中的中文问题及建议最优解决方法

摘录自:http://fafeng.blogbus.com/logs/3062998.html http://www.blogbus.com/fafeng-logs/3063006.html 深入剖析Java编程中的中文问题及建议最优解决方法 说明:本文为作者原创,作者联系地址为:[email protected].由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台

链接脚本在编程中的高级运用之一:可变长数组

作为嵌入式软件工程师,应该要清楚程序的每一条指令在哪里,什么时候会被加载到内存,什么时候会被执行.链接脚本会明确告诉你程序的代码和数据在内存中的分布.精确控制代码和数据在内存中的分布是高效利用内存资源的前提.自定义链接脚本是资深嵌入式软件工程师的必备技能,更是嵌入式架构师的最基本要求.此外,灵活定制链接脚本在编程方面有更高级的应用. 一.编译链接原理 简单讲述编译链接的基本原理有助于后面内容的理解. a. 简单点说,一个可执行程序包括文件头.代码段(.text).数据段(.bss).符号段等信息

一文读懂高性能网络编程中的I/O模型

1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的高性能网络编程的I/O模型概览以及网络服务进程模型的比较,以揭开设计和实现高性能网络架构的神秘面纱. 限于篇幅原因,请将本文与<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>连起来读,这样会让知识更连贯. 学习交流: - 即时通讯开发交流3群:185926912[推荐] - 移动端IM

文案写作有哪些关键步骤?

从事网络运营工作,文案写作是必不可少的环节,那文案写作中有哪些注意事项,有哪些关键步骤呢,本文就和大家一起来扒一扒. 文案归根结底是产品(品牌)战略的终端艺术展示,卓越的文案离不开对战略思想的彻悟,对产品的用心体验.对用户的感同身受. 我以前面试高级运营候选人时,经常会使点小坏心眼: 先跟候选人谈生活谈理想让他极度放松跟我称兄道弟以为Offer十拿九稳的时候,漫不经心的抛出一个烧脑的开放型问题,比如: "假如你现在运营共享雨伞app,要在地铁投放一期广告,文案你打算怎么写?" 大部分人

网络编程中的同步与异步

网络编程中有三对关键的词,单线程与多线程.阻塞与非阻塞.同步与异步,同步与异步一直是比较疑惑的地方.以前认为,同步就是阻塞socket,异步就是非阻塞socket,现在发现这样理解很片面的,其实好多地方有同步异步的概念. 数字电路中的同步与异步是针对时钟来说的 同步时序逻辑电路:各触发器有相同的时钟脉冲,时钟脉冲到来时所有触发器状态同时改变异步时序逻辑电路:没有统一的时钟脉冲,所有触发器的状态转换不一定发生在同一时刻,某些触发器的状态转换有可能会延迟. 在通信原理中也有同步与异步的概念 同步传输

CentOS 5 CentOS 6 启动流程及关键步骤

CentOS 5 CentOS 6 启动流程及关键步骤 1.加电自检:当打开主机电源时,主机会唤醒cpu,使其运行CMOS中的BIOS, BIOS检查必要的硬件是否存在(内存.硬盘等) BIOS其实是一个小型系统,可以完成一些像检测这样的任务. 自检若不通过,关机 2.BIOS查找可启动设备 自检通过,根据BIOS设定的启动顺序(一般有硬盘启动.光盘启动.移动设备启动.以及网络启动等,这个设定值可通过人工干预修改以使加载不同的系统)找到第一个具有引导程序(bootloader)即为要加载的设备,