关闭

[置顶] 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发详解

标签: 低功耗蓝牙blelibAndroid
12307人阅读 评论(5) 收藏 举报
分类:

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410

使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发详解


BleLib是Android低功耗蓝牙4.0及以上开发的辅助库,一行代码解决Ble初始化、扫描、连接、特性读写、设置通知等操作。

BleLib支持单个Ble连接或多个Ble设备同时连接。

BleLib中的关键类:

  • BleService是单个Ble连接操作的服务类
  • GattAttributes类中包含了蓝牙联盟规定的服务和特征的UUID值
  • MultipleBleService类是可多个蓝牙设备同时连接的服务类

使用方法

第一步:添加BleLib库依赖

因此,在你项目Module中的build.gradle文件中添加库依赖即可,如下:

dependencies {
    compile 'com.junkchen.blelib:blelib:1.0.4'
}

只此一句即可使用BleLib库,方便吧,要的就是这效果。
使用Android Studio时按照如下方式添加依赖比较好,获取的是最新的版本,结果和上面是一样的,进入模块的库依赖设置,搜索blelib即可获取:


第二步:绑定BleLib服务

BleLib库中的Ble服务类继承了Service,因此建议绑定服务进行使用。(如果项目中需要同时连接多了Ble设备进行控制请绑定MultipleBleService)

private BleService mBleService;
private boolean mIsBind;
private ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        mBleService = ((BleService.LocalBinder) service).getService();
        if (mBleService.initialize()) {
            if (mBleService.enableBluetooth(true)) {
                mBleService.scanLeDevice(true);
                Toast.makeText(BleScanActivity.this, "Bluetooth was opened", Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(BleScanActivity.this, "not support Bluetooth", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        mBleService = null;
        mIsBind = false;
    }
};

private void doBindService() {
   Intent serviceIntent = new Intent(this, BleService.class);
   bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
}

private void doUnBindService() {
   if (mIsBind) {
       unbindService(serviceConnection);
       mBleService = null;
       mIsBind = false;
   }
}

第三步:初始化操作

当服务绑定后可进行初始化操作,判断该机是否支持蓝牙,调用如下方法:

mBleService.initialize();//Ble初始化操作  

该方法会返回一个boolean值,返回true表示初始化成功,支持蓝牙;返回false表示初始化操作失败,则后续的所有操作都不能进行。


第四步:打开蓝牙

当初始化操作成功后就可以打开蓝牙了,调用如下方法:

mBleService.enableBluetooth(boolean enable);//打开或关闭蓝牙 

该方法需要传入一个boolean类型的参数,true表示打开蓝牙,false表示关闭蓝牙;并返回boolean参数,返回true表示蓝牙打开,否则关闭。


第五步:扫描Ble设备

当蓝牙打开后可以进行Ble设备的扫描了,调用如下方法:

mBleService.scanLeDevice(boolean enable, long scanPeriod);//启动或停止扫描Ble设备  

调用该方法需要传入一个boolean参数,true表示开始进行扫描Ble设备,false表示停止扫描,默认扫描10秒钟后停止,如果想要自己设定扫描的时间,可以输入一个long型参数,表示时间单位为毫秒,如3000表示3秒后停止扫描,扫描结束是会发出广播。

扫描的结果可以从扫描监听或者广播接收器两种方式获取,设置方法如下:

监听方式接收扫描到的Ble设备

//Ble扫描回调
mBleService.setOnLeScanListener(new BleService.OnLeScanListener() {
    @Override
    public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
        //每当扫描到一个Ble设备时就会返回,(扫描结果重复的库中已处理)
    }
}); 

注意:设置监听一定要等到BleService服务绑定之后才进行,否则会造成空指针异常)

广播接收扫描到的Ble设备

private BroadcastReceiver bleReceiver = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
           if (intent.getAction().equals(BleService.ACTION_BLUETOOTH_DEVICE)) {
               String tmpDevName = intent.getStringExtra("name");
               String tmpDevAddress = intent.getStringExtra("address");
               Log.i(TAG, "name: " + tmpDevName + ", address: " + tmpDevAddress);
           } else if (intent.getAction().equals(BleService.ACTION_SCAN_FINISHED)) {
               //扫描Ble设备停止
           }
       }
   };

两种方式获取都可以,但是监听方式获取的信息会多一些,可根据自己的需求进行选择使用那种方式。


第六步:连接Ble服务

当扫描到Ble设备后就可以进行连接操作了,调用如下方法:

mBleService.connect(String address);//连接Ble  
mBleService.disconnect();//取消连接  

连接需要传入要连接的Ble设备的地址。

连接状态可以从连接监听或者广播接收器两种方式获取,设置方法如下:

监听获取Ble连接状态

//Ble连接回调
mBleService.setOnConnectListener(new BleService.OnConnectListener() {
    @Override
    public void onConnect(BluetoothGatt gatt, int status, int newState) {
        if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            //Ble连接已断开
        } else if (newState == BluetoothProfile.STATE_CONNECTING) {
            //Ble正在连接
        } else if (newState == BluetoothProfile.STATE_CONNECTED) {
            //Ble已连接
        } else if (newState == BluetoothProfile.STATE_DISCONNECTING) {
            //Ble正在断开连接
        }
    }
}); 

广播接收Ble连接状态

private BroadcastReceiver bleReceiver = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
           if (intent.getAction().equals(BleService.ACTION_GATT_CONNECTED)) {
               //Ble已连接
           } else if (intent.getAction().equals(BleService.ACTION_GATT_DISCONNECTED)) {
               //Ble连接已断开
           } 
       }
   };

当连接上Ble后会进行服务的获取,如果服务和特性不能发现,那么就不能进行特性的读写和设置GATT通知。服务发现监听设置如下:

//Ble服务发现回调
mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() {
    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {

    }
});

第七步:读写Ble特性和接收GATT通知

连接上Ble并获取服务之后就可以对特性进行读写,设置GATT通知,操作如下:

mBleService.setCharacteristicNotification();//设置通知  
mBleService.readCharacteristic();//读取数据  
mBleService.writeCharacteristic();//写入数据 

特性读取的数据和GATT通知接收数据设置OnDataAvailableListener监听获取,设置如下:

//Ble数据回调
mBleService.setOnDataAvailableListener(new BleService.OnDataAvailableListener() {
    @Override
    public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        //处理特性读取返回的数据
    }

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
        //处理通知返回的数据
    }
});

总结

最后小小总结下使用BleLib库进行Android低功耗蓝牙Ble的开发步骤:

  1. 添加BleLib库依赖
  2. 绑定BleLib服务
  3. 初始化操作
  4. 打开蓝牙
  5. 扫描Ble设备
  6. 连接Ble服务
  7. 读写Ble特性和接收GATT通知

Author

2016/3/16 21:49:15

7
0
查看评论

蓝牙4.0--Android BLE(二)BleLib开源库

简介  首先非常感谢BleLib的作者为我们提供了如此方便的开源库;这个库大大的简化了我们BLE开发的步骤,操作非常简单BleLib中的关键类 BleService是单个Ble连接操作的服务类 GattAttributes类中包含了蓝牙联盟规定的服务和特征的UUID值 MultipleBleServ...
  • q531934288
  • q531934288
  • 2016-06-21 17:54
  • 3395

android BLE蓝牙详细讲解(一)

本文主要讲解Android低功耗蓝牙的api使用以及蓝牙扫描、连接、发送数据、接收数据等一系列操作,本篇结尾有本人封装的BleLib蓝牙库,非常适合蓝牙初学者使用,只需要一行代码注入就OK了,而且用法也极其简单,我会在第二篇中专门讲解一下BleLib库的使用。在BLE协议中,有两个角色,周边(Per...
  • liulei823581722
  • liulei823581722
  • 2016-12-05 12:52
  • 2319

BLE 开源项目总结

ios ble 知识: https://developer.apple.com/library/prerelease/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPrac...
  • langwang2
  • langwang2
  • 2016-07-22 07:58
  • 1162

android-ble蓝牙封装lib

  • 2017-06-01 17:27
  • 18.22MB
  • 下载

蓝牙4.0BLE的使用与封装

简单介绍 蓝牙发展至今经历了各个版本的更新。1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2。 4.x开始的蓝牙我们称之为低功耗蓝牙也就是蓝牙ble,当然4.x版本的蓝牙也是向下兼容的。 低功耗蓝牙较传统蓝牙,传输速度更快,覆盖范围更广,安全性更高,延迟更短,耗电极低等等优点。 传统蓝...
  • songdongpanCSDN
  • songdongpanCSDN
  • 2017-04-07 14:09
  • 535

蓝牙BLE开发基础教程 android5.0 蓝牙4.0 透传 Android Studio(一)

说明:本人因需要做一个APP,通过蓝牙与单片机进行通信,但所参阅的教程不够具体,版本也很乱,用了很长时间才搞定,现将经验分享出来,给大家提供参考 开发环境 Android 5.0 (最低) IDE Android Studio2.3 蓝牙模块 JDY-08/JDY-10 android是从...
  • deweikaiwen
  • deweikaiwen
  • 2017-04-04 22:12
  • 3020

【Android(BLE)】Android(BLE)之搭建开发环境(Android Studio)

本文介绍如何搭建安卓开发环境(Android Studio)
  • feilusia
  • feilusia
  • 2017-01-21 19:09
  • 1464

Android BLE蓝牙例子(包括android版Lightblue)实例源码

  • 2016-01-14 10:20
  • 2.41MB
  • 下载

蓝牙BLE开发基础教程 android5.0 蓝牙4.0 透传 Android Studio(二)

三、搜索设备//定义对象 private BluetoothLeScanner bluetoothLeScanner; private List<BluetoothDevice> devices = new ArrayList<BluetoothDevice&g...
  • deweikaiwen
  • deweikaiwen
  • 2017-04-05 17:33
  • 3989

Android studio BLE通信助手(工程文件+apk)

  • 2017-04-10 07:36
  • 29.50MB
  • 下载
    个人资料
    • 访问:171469次
    • 积分:2053
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:0篇
    • 译文:4篇
    • 评论:55条
    切磋技艺

    欢迎进群交流、切磋技艺


    QQ群:365532949

    博客专栏