Android 蓝牙4.0 Ble开发(一)

这篇博客主要介绍了Android平台上的蓝牙低功耗(BLE)4.0开发,包括BLE简介、相关API、设备分类及作为中央设备的示例应用。作者分享了自己在蓝牙开发过程中的经验和遇到的挑战,旨在帮助其他开发者避免或解决类似问题,并承诺后续将提供外设端的Demo代码。
摘要由CSDN通过智能技术生成

一,Ble 4.0简介

低功耗蓝牙,低成本、短距离、可互操作的鲁棒性无线技术,从蓝牙4.0开始支持,Android端是从Android4.3开始支持ble,但是是从android5.0开始支持手机作为外设端开发,在此(5.0)之前只能作为中央设备开发。

二,API

BluetoothAdapter  蓝牙适配器,通过它来获取蓝牙地址、蓝牙名字、绑定设备、扫描模式、蓝牙状态等参数(后面代码有详细说明)
BluetoothLeScanner 蓝牙扫描类
BluetoothDevice 蓝牙设备类
BluetoothGatt 蓝牙通信类,通过这个类来建立通信通道
BluetoothGattService 蓝牙通信通道服务类
BluetoothGattCallback:中央设备回调类。
BluetoothGattServer:外设提供数据类;
BluetoothGattServerCallback:外设回调类
BluetoothGattCharacteracteristic 蓝牙通信通道特征值类
BluetoothGattDescriptor 蓝牙通信通道特征值属性类

一个ble终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个value和多个Descriptor,一个Descriptor包含一个value。其中Characteristic比较重要,用的比较多。Descriptor主要对Characteristic进行范围、单位的描述。

三,ble的分类

    中央设备(central):进行扫描,启动连接,在单一或多链路层作为主机。
    外围设备(periphery):广播发送者,可连接的设备,在单一链路层作为从机。
    广播者(Braodcaster):广播发送者,是不可连接的设备。
    观察者(Observer):扫描广播,不能够启动连接。
广播者和观察者不能建立连接。应用:温度传感器和温度显示器。
一个中央可以同时连接多个周边,但是一个周边只能连接一个中央。

四,作为中央设备示例

    1.初始化Ble
private void initBle() {
        //获取蓝牙管理类对象
        BluetoothManager manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
        //获取蓝牙适配器
        adapter = manager.getAdapter();
        //判断是否支持蓝牙(此处并非是Ble)
        if (adapter == null) {
            Log.d(tag, "该设备没有蓝牙");
            return;
        } else {
            Log.d(tag, adapter.getAddress() //蓝牙地址
            + "\n" + adapter.getName()   //蓝牙名字
            + "\n" + adapter.getBondedDevices()//已匹配的设备
            + + "\n" + adapter.getScanMode() //扫描模式
            + "\n" + adapter.getState());//状态
            //判断蓝牙打开状态如果没打开直接打开
            if (!adapter.isEnabled()) {
                adapter.enable();
         }
//当然此处也可采用,通过用户点击来打开蓝牙
// Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);            //enableBtIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//context.startActivity(enableBtIntent);
}
//判定是否支持Ble
if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            Toast.makeText(this, "该设备上不支持BLE", Toast.LENGTH_SHORT).show();
} else {
     Toast.makeText(this, "该设备上支持BLE", Toast.LENGTH_SHORT).show();
 }
     mac.setText("本机的蓝牙mac\n" + adapter.getAddress());
 }
2.扫描

    // lescan开始扫描ble设备
private void startLeScan(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Log.e(tag,"start bleScan");
        //获取扫描对象       mBluetoothLeScanner=adapter.getBluetoothLeScanner();
        //扫描结果的集合
 List<ScanFilter>bleScnFilter=new ArrayList<>();
 bleScnFilter.add(new ScanFilter.Builder().setDeviceAddress(address).build());
 //扫描设置
ScanSettings bleScanSetting= new ScanSettings.Builder().build();
//开始扫描
mBluetoothLeScanner.startScan(null, bleScanSetting, mBleScanCallback);
}else{
        Log.e(tag,"build not support LeScan");
}
}
3.扫描回调
    @Override
    public void onBatchScanResults(List<ScanResult> results) {
        super
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值