安卓蓝牙技术

Android提供BluetoothAdapter类蓝牙通信。通过调用创建的对象的静态方法getDefaultAdapter()。其语法如下给出。

private BluetoothAdapter BA;

BA = BluetoothAdapter.getDefaultAdapter();方法一

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

mBluetoothAdapter = bluetoothManager.getAdapter();


为了使用设备的蓝牙,调用下列蓝牙ACTION_REQUEST_ENABLE的意图。其语法如下:

Intent turnOn= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(turnOn, 0);       

除了这个常量,有提供其它的API,支持不同任务的其他常数。它们在下面列出。


Sr.No

常数说明

1

ACTION_REQUEST_DISCOVERABLE
此常数用于开启蓝牙的发现

2

ACTION_STATE_CHANGED
此常量将通知蓝牙状态已经改变

3

ACTION_FOUND
此常数用于接收关于所发现的每个设备的信息

启用了蓝牙功能之后,可以通过调用 getBondedDevices()方法来获取配对设备列表。它返回一组的蓝牙设备。其语法如下:

private Set<BluetoothDevice>pairedDevices;

pairedDevices= BA.getBondedDevices();

除了配对的设备,还有API,让更多蓝牙控制权等方法。它们在下面列出。


Sr.No

方法及说明

1

enable()
这种方法使适配器,如果未启用

2

isEnabled()
如果适配器已启用此方法返回true

3

disable()
该方法禁用适配器

4

getName()
此方法返回的蓝牙适配器的名称

5

setName(String name)
此方法更改蓝牙名称

6

getState()
此方法返回蓝牙适配器的当前状态

7

startDiscovery()
此方法开始蓝牙120秒的发现过程。


蓝牙权限

android.permission.BLUETOOTH : 允许程序连接到已配对的蓝牙设备,请求连接/接收/传输数据需要改权限,主要用于对配对后进行操作;

 

android.permission.BLUETOOTH_ADMIN : 允许程序发现和配对蓝牙设备,该权限用来管理蓝牙设备,有了这个权限,应用才能使用本机的蓝牙设备,主要用于对配对前的操作;

 

优先级 : BLUETOOTH权限是BLUETOOTH_ADMIN权限的前提,如果没有BLUETOOTH权限,就不能使用BLUETOOTH_ADMIN权限;

 

除了蓝牙权限外,如果需要BLE feature则还需要声明uses-feature

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

 

按时requiredtrue时,则应用只能在支持BLEAndroid设备上安装运行;requiredfalse时,Android设备均可正常安装运行,需要在代码运行时判断设备是否支持BLE feature

// Use this check to determine whether BLE is supported on the device. Then

// you can selectively disable BLE-related features.

if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {

    Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();

    finish();

}

 

UUID

1.1 认识一下 UUID UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会(Open Software Foundation, OSF) 的组织应用在分布式计算环境(Distributed Computing Environment, DCE)领域的一部分。

在蓝牙 3.0 及以下版本中,UUID被用于唯一标识一个服务,比如文件传输服务,串口 服务、打印机服务等,如下:

 

蓝牙串口服务

SerialPortServiceClass_UUID = {00001101-0000-1000-8000-00805F9B34FB}

LANAccessUsingPPPServiceClass_UUID = {00001102-0000-1000-8000-00805F9B34FB}

 

拨号网络服务

DialupNetworkingServiceClass_UUID = {00001103-0000-1000-8000-00805F9B34FB}

 

信息同步服务

IrMCSyncServiceClass_UUID = {00001104-0000-1000-8000-00805F9B34FB}SDP_OBEXObjectPushServiceClass_UUID = {00001105-0000-1000-8000-00805F9B34FB}

 

文件传输服务

OBEXFileTransferServiceClass_UUID = {00001106-0000-1000-8000-00805F9B34FB}IrMCSyncCommandServiceClass_UUID = {00001107-0000-1000-8000-00805F9B34FB}

 

蓝牙的连接有主从设备,提供服务的可以认为是从设备。主设备通过 UUID 访问从设备 提供具有相同 UUID 的服务,从而建立客服端—服务器(C/S)模式。

如果你只需要搜索指定UUID的外设,你可以调用 startLeScan(UUID[], BluetoothAdapter.LeScanCallback)方法。

其中UUID数组指定你的应用程序所支持的GATT ServicesUUID

 

 

BluetoothAdapter.LeScanCallback的实现示例如下:

private LeDeviceListAdapter mLeDeviceListAdapter;

...

// Device scan callback.

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();

           }

       });

   }

};

 

注意:搜索时,你只能搜索传统蓝牙设备或者BLE设备,两者完全独立,不可同时被搜索。

 

 

Android中进行蓝牙开发需要使用到的类的执行过程是:

 

1、使用BluetoothAdapter.startLeScan来扫描低功耗蓝牙设备

 

2、在扫描到设备的回调函数中会得到BluetoothDevice对象,

并使用BluetoothAdapter.stopLeScan停止扫描

 

3、使用BluetoothDevice.connectGatt来获取到BluetoothGatt对象

 

4、执行BluetoothGatt.discoverServices,这个方法是异步操作,在回调函数onServicesDiscovered中得到status,通过判断status是否等于BluetoothGatt.GATT_SUCCESS来判断查找Service是否成功

 

5、如果成功了,则通过BluetoothGatt.getService来获取BluetoothGattService

 

6、接着通过BluetoothGattService.getCharacteristic获取BluetoothGattCharacteristic

 

然后通过BluetoothGattCharacteristic.getDescriptor获取BluetoothGattDescriptor






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值