Android之BLE开发(一)

本文详细介绍如何基于Android4.3和Bluetooth4.0技术进行BLE开发,包括Android项目权限配置、蓝牙设备搜索等关键步骤。

简介:本文介绍如何基于Android 4.3和Bluetooth 4.0技术进行BLE开发。重点描述了如何进行Android权限的配置和蓝牙设备的搜索。


准备工作

首先要了解下什么是BLE,以及BLE相关的技术名词,如GATT、Characteristic等等,关于这些信息,详见 BLE开发入门


Android项目权限配置

基于Android开发BLE,操作系统版本必须在4.2及以上版本,而蓝牙版本则是4.0

AndroidManifest.xml中对支持的系统版本限制:

<uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="17" />

对BLE硬件环境进行限制:

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

除此之外,还需要声明蓝牙权限和蓝牙管理权限:

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

有了这些基础配置之后,我们就可进行开发了。

一般来说,我们可以直接使用Android SDK进行BLE开发,不过你也可以考虑使用第三方SDK,毕竟Android手机品牌众多,不兼容也说不定呢。。。

IOTSDK 可以作为第三方SDK的一个参考。。。

而我们进行BLE开发,肯定是要使用到Service的,因此需要在AndroidManifest.xmlapplication标签下声明下Service,例如IOTSDK的Service声明:

 <service
        android:name="com.xtremeprog.sdk.ble.BleService"
        android:enabled="true" />

如果是自己写的Service,那么就把android:name的值修改下就好。
关于如何开发Service,参考这篇文章:Android之本地Service(LocalService)


项目开发

1、 判断是否兼容BLE

在操作蓝牙设备之前,先判断Android设备是否支持BLE:

//判断系统环境
if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    Toast.makeText(this,"不支持BLE", Toast.LENGTH_SHORT).show();
    finish();
}

2、获得蓝牙服务和适配器

比较重要的是mBluetoothAdapter对象,后续操作都是围绕它进行的。如果它为空的话,就表示不支持咯。。。

//获得系统的蓝牙服务
final BluetoothManager bluetoothManager =
                (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
//获得蓝牙适配器
mBluetoothAdapter = bluetoothManager.getAdapter();

3、主动开启蓝牙

开启的方式有两种,如下:

第一种:

// 为了确保设备上蓝牙能使用, 如果当前蓝牙设备没启用,弹出对话框向用户要求授予权限来启用
if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}   

第二种:

// 开启蓝牙
mBluetoothAdapter.enable();

至于要用哪种,看个人喜好。。。

4、搜索蓝牙设备

前面我们已经获取了mBluetoothAdapter对象,接下来我们要使用它进行搜索设备。调用scanLeDevice(true)进行搜索,调用scanLeDevice(false)停止搜索。代码中的mLeScanCallback是一个回调接口。

private void scanLeDevice(final boolean enable) {
    //如果是开启搜索
    if (enable) {
        // SCAN_PERIOD是10秒,即10秒之后停止搜索.
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //搜索标志位
                mScanning = false;
                //停止搜索
                mBluetoothAdapter.stopLeScan(mLeScanCallback);
                //刷新下菜单。。。
                invalidateOptionsMenu();
            }
        }, SCAN_PERIOD);
        //搜索修改下标志位
        mScanning = true;
        //开始搜索
        mBluetoothAdapter.startLeScan(mLeScanCallback);
    } else {
        //停止搜索,修改标志位
        mScanning = false;
        mBluetoothAdapter.stopLeScan(mLeScanCallback);
    }
    //刷新菜单
    invalidateOptionsMenu();
}

// 蓝牙设备搜索回调
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() {
                //往列表适配器中加入设备
                mLeDeviceListAdapter.addDevice(device);
                //通知适配器数据已更新
                mLeDeviceListAdapter.notifyDataSetChanged();
            }
        });
    }
};

这样,就可以把搜索到的设备保存到List中了,考虑到重复问题,适配器中的addDevice写法如下:

public void addDevice(BluetoothDevice device) {
    //如果设备列表中不包含该设备则添加
    if(!mLeDevices.contains(device)) {
        mLeDevices.add(device);
    }
}

5、显示设备列表

这个步骤相对比较简单,上面有提到列表适配器mLeDeviceListAdapter,只要编写下,然后ListView设置下adapter即可。

通过前面这些步骤我们已经得到了List<BluetoothDevice> mLeDevices列表,即蓝牙设备列表。后续开发中,我们需要使用到对应蓝牙设备的名字和地址,就可以进行连接和操作了。获取的方式如下:

//将设备从列表中取出
BluetoothDevice device = mLeDevices.get(i);
//获得设备名称
String deviceName = device.getName();
//获得设备地址
String deviceAddr = device.getAddress();

本文先写到这里,已经完成了蓝牙设备的搜索和名称、地址的获取,下一篇将继续我们的开发。。。主要是:如何进行连接,如何操作GATT、Characteristic,完成数据的传输(读写)。

源代码到时候再一起放出。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值