简介:本文介绍如何基于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.xml中application标签下声明下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();

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

被折叠的 条评论
为什么被折叠?



