如何操作Android4.3 蓝牙BLE

作者&投稿:窄新 (若有异议请与网页底部的电邮联系)
android 4.3的BLE蓝牙功能,怎么获取扫描到的所有数据~

public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) ,扫描回调里面,第三个参数scanRecord就是附加的数据记录。

楼主说的蓝牙4.0应该是指BLE吧?!
安卓操作系统确实要4.3及以上版本才有支持BLE。

Android4.3 蓝牙BLE初步
一、关键概念:
Generic Attribute Profile (GATT)
通过BLE连接,读写属性类小数据的Profile通用规范。现在所有的BLE应用Profile都是基于GATT的。

Attribute Protocol (ATT)
GATT是基于ATT Protocol的。ATT针对BLE设备做了专门的优化,具体就是在传输过程中使用尽量少的数据。每个属性都有一个唯一的UUID,属性将以characteristics and services的形式传输。

Characteristic
Characteristic可以理解为一个数据类型,它包括一个value和0至多个对次value的描述(Descriptor)。

Descriptor
对Characteristic的描述,例如范围、计量单位等。

Service
Characteristic的集合。例如一个service叫做“Heart Rate Monitor”,它可能包含多个Characteristics,其中可能包含一个叫做“heart rate measurement"的Characteristic。

二、角色和职责:
Android设备与BLE设备交互有两组角色:

中心设备和外围设备(Central vs. peripheral);
GATT server vs. GATT client.

Central vs. peripheral:
中心设备和外围设备的概念针对的是BLE连接本身。Central角色负责scan advertisement。而peripheral角色负责make advertisement。

GATT server vs. GATT client:
这两种角色取决于BLE连接成功后,两个设备间通信的方式。

举例说明:
现有一个活动追踪的BLE设备和一个支持BLE的Android设备。Android设备支持Central角色,而BLE设备支持peripheral角色。创建一个BLE连接需要这两个角色都存在,都仅支持Central角色或者都仅支持peripheral角色则无法建立连接。

当连接建立后,它们之间就需要传输GATT数据。谁做server,谁做client,则取决于具体数据传输的情况。例如,如果活动追踪的BLE设备需要向Android设备传输sensor数据,则活动追踪器自然成为了server端;而如果活动追踪器需要从Android设备获取更新信息,则Android设备作为server端可能更合适。

三、权限及feature:
和经典蓝牙一样,应用使用蓝牙,需要声明BLUETOOTH权限,如果需要扫描设备或者操作蓝牙设置,则还需要BLUETOOTH_ADMIN权限:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

除了蓝牙权限外,如果需要BLE feature则还需要声明uses-feature:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

按时required为true时,则应用只能在支持BLE的Android设备上安装运行;required为false时,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();
}

四、启动蓝牙:
在使用蓝牙BLE之前,需要确认Android设备是否支持BLE feature(required为false时),另外要需要确认蓝牙是否打开。
如果发现不支持BLE,则不能使用BLE相关的功能。如果支持BLE,但是蓝牙没打开,则需要打开蓝牙。

打开蓝牙的步骤:

1、获取BluetoothAdapter

BluetoothAdapter是Android系统中所有蓝牙操作都需要的,它对应本地Android设备的蓝牙模块,在整个系统中BluetoothAdapter是单例的。当你获取到它的示例之后,就能进行相关的蓝牙操作了。

获取BluetoothAdapter代码示例如下:
// Initializes Bluetooth adapter.
final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();

注:这里通过getSystemService获取BluetoothManager,再通过BluetoothManager获取BluetoothAdapter。BluetoothManager在Android4.3以上支持(API level 18)。

2、判断是否支持蓝牙,并打开蓝牙

获取到BluetoothAdapter之后,还需要判断是否支持蓝牙,以及蓝牙是否打开。
如果没打开,需要让用户打开蓝牙:
private BluetoothAdapter mBluetoothAdapter;
...
// Ensures Bluetooth is available on the device and it is enabled. If not,
// displays a dialog requesting user permission to enable Bluetooth.
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

五、搜索BLE设备:
通过调用BluetoothAdapter的startLeScan()搜索BLE设备。调用此方法时需要传入 BluetoothAdapter.LeScanCallback参数。
因此你需要实现 BluetoothAdapter.LeScanCallback接口,BLE设备的搜索结果将通过这个callback返回。

由于搜索需要尽量减少功耗,因此在实际使用时需要注意:

1、当找到对应的设备后,立即停止扫描;
2、不要循环搜索设备,为每次搜索设置适合的时间限制。避免设备不在可用范围的时候持续不停扫描,消耗电量。

搜索的示例代码如下:
/**
* Activity for scanning and displaying available BLE devices.
*/
public class DeviceScanActivity extends ListActivity {

private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler;

// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;
...
private void scanLeDevice(final boolean enable) {
if (enable) {
// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}, SCAN_PERIOD);

mScanning = true;
mBluetoothAdapter.startLeScan(mLeScanCallback);
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
...
}
...
}

如果你只需要搜索指定UUID的外设,你可以调用 startLeScan(UUID[], BluetoothAdapter.LeScanCallback)方法。
其中UUID数组指定你的应用程序所支持的GATT Services的UUID。

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设备,两者完全独立,不可同时被搜索。

六、连接GATT Server:
两个设备通过BLE通信,首先需要建立GATT连接。这里我们讲的是Android设备作为client端,连接GATT Server。
连接GATT Server,你需要调用BluetoothDevice的connectGatt()方法。此函数带三个参数:Context、autoConnect(boolean)和BluetoothGattCallback对象。调用示例:

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

函数成功,返回BluetoothGatt对象,它是GATT profile的封装。通过这个对象,我们就能进行GATT Client端的相关操作。BluetoothGattCallback用于传递一些连接状态及结果。

BluetoothGatt常规用到的几个操作示例:

connect() :连接远程设备。
discoverServices() : 搜索连接设备所支持的service。
disconnect():断开与远程设备的GATT连接。
close():关闭GATT Client端。
readCharacteristic(characteristic) :读取指定的characteristic。
setCharacteristicNotification(characteristic, enabled) :设置当指定characteristic值变化时,发出通知。
getServices() :获取远程设备所支持的services。

等等。

注:
1、某些函数调用之间存在先后关系。例如首先需要connect上才能discoverServices。
2、一些函数调用是异步的,需要得到的值不会立即返回,而会在BluetoothGattCallback的回调函数中返回。例如discoverServices与onServicesDiscovered回调,readCharacteristic与onCharacteristicRead回调,setCharacteristicNotification与onCharacteristicChanged回调等。


现在智能手机的操作系统有哪些?要全,要举例说明哦!!!3QQQQQ
从全局来看,iOS和Android智能系统是领头羊,其他触控智能系统依靠各自的优势也是有着一部分的小众市场,究竟它们之间有何不同?各自的优势和劣势又再哪里?各自最具代表的机型又是哪 款?相信看完这篇文章你会找到答案。AndroidAndroid智能系统是谷歌公司在2007年推出的一款触控智能操作系统,在2008年9月第一款Android...

IPHONE是给左手设计的还是给右手设计
但是众多厂商的宣传照片一般都是用左手持机。2、第二个问题也不存在为左手设计或者为右手设计。在官方给出的HIG中,写的是用非利手持机(左手)另一只手的手指操作,或者一只手持机,用这只手的拇指操作(此处他没有说是左手还是右手)。但是实际中 :根据ios6 和androi4.0后 都会把积极操作放在右边...

drastic模拟器怎么用,我下载了黑2但是找不到游戏阿
drastic模拟器使用方法 1、我们安装好模拟器后如果直接打开的话会出现以下界面:这是因为缺少三个BIOS文件,请自行搜索本吧或者百度下载,然后放入手机sdcard\/Android\/data\/com.dsemu.drastic\/files\/system文件夹内 2、放好文件再次打开模拟器可能会出现:正常情况下点击屏幕无视掉就好第一次的话 3、进入...

QQ游戏积分陕西麻将积分场怎么进?
打开你的qq 下面有qq游戏点击进去添加陕西麻将 然后就可以直接进去了。里面有积分场 新手场 点击可以直接进入 房间你随便进。

华为mate8真的支持北斗吗?为什么检测不到北斗信号呢?
支持的,华为mate8支持的GPS导航,A-GPS技术,GLONASS导航,北斗导航;该机支持全新的指纹2.0识别技术,指关节2.0技术。搭载了4000mAh超大容量电池,同时还支持快充技术。

手机连接WiFi,有数据线,如何让电脑通过手机数据线上网,注意是要手机...
若使用的是vivo手机,可进入手机设置--其他网络与连接--个人热点--其他共享方式--开启“通过USB共享网络”,然后电脑选择手机网络连接使用。注:手机不支持通过USB共享电脑的网络。

哪个手机性价比高
为您推荐三星发布的Note9,手机主要特征:三星Galaxy Note9强悍的手机功能,让您操控游刃有余:1.配备了4000毫安时的超强续航电池,为您的日常使用提供更长时间的续航能力。2.拥有最高512GB的内置存储容量,并可额外支持512GB扩展存储,您将拥有几乎1TB的空间,给您持久的存储体验。3.先进的处理器可有效...

有什么软件可以手机远程控制电脑
日常办公中电脑基本是必备的,但有时候我们急需用电脑的时候电脑却不在身边,现在有办法可以用手机远程控制电脑。

荣耀magic2,ai双频gps怎么开启
你好,该功能是自动的,不需要自己手动开启,在你使用导航时会自动开启AI双频GPS,系统会根据具体环境启动AI双频GPS加速定位并提高定位精度

现在什么手机性价比高
荣耀20i正面搭载了一块6.21英寸珍珠屏,分辨率能达到FHD+级别,拥有非常细腻的画面表现。并且,它的这款屏幕采用三面窄边框设计,屏幕屏占比达到90+%,兼顾6.21英寸大屏幕和小巧机身持握感,女性用户单手操作十分顺畅便捷,对于需要用到单手自拍的场景,就更方便不过了。4、vivo Z5x vivo Z5x是...

富民县19524099696: Android 4.3如何修改蓝牙连接的参数 -
当涂府杏灵: 蓝牙功能可以参考下面的操作打开使用: 1.打开其他设备的蓝牙,并使其对其他设备可见. 2.打开下拉顶帘,点击蓝牙图标使其变为绿色,跳出提示框,勾选对其他设备可见. 3.点击扫描,搜索到其他设备后,点击该设备名称,双方点确定后配对成功. 4.选择要传输的文件,共享通过蓝牙即可传输文件.

富民县19524099696: Android2.3.5 手机没有蓝牙功能 怎么添加蓝牙功能? -
当涂府杏灵: 手机本身没有蓝牙功能是没法通过软件来添加的.

富民县19524099696: 安卓手机如何使用蓝牙连接传输文件?
当涂府杏灵: 步骤一:打开蓝牙 打开蓝牙于两种方法,一种是通过快捷方式,比如桌面的蓝牙开关等以及状态栏的下拉菜单,还有一种是居然菜单设置里的蓝牙选项,选择打开蓝牙. 步骤二:设置蓝牙,配对蓝牙 在蓝牙界面里按菜单键可以看到重命名、超...

富民县19524099696: 请问Android操作系统的为什么不能使用蓝牙?有什么软件可以让它能使用?谢谢,急啊!!!!!! -
当涂府杏灵: 1、可以通过刷机解决,这个相对麻烦一点 2、下个蓝牙助手..(先用或用本软件“本地蓝牙”传送配对成功设备;解决了问题与在可以直接打开远程文件了;互传文件都测试了没有问题 ;手机打电话也可以传送到音响,听歌也OK.) 3、 如果你的手机已经获取ROOT权限,就把system/app文件夹里的蓝牙文件移动出来.然后重新点击安装.百分之90成功,注意,一定要把之前的蓝牙数据清除掉

富民县19524099696: android蓝牙怎么控制手机 -
当涂府杏灵: 机连接不上蓝牙耳机有以下几个解决办法: 一、蓝牙耳机没有进入配对模式; 解决方法:每一款蓝牙耳机都有一个功能按键,长按多功能按键直至红蓝灯交替闪动后 松手,打开手机蓝牙进行搜索 配对即可连接 解决方法:同时按住 多 功能按键和音量控制+键 大约4秒 红灯闪动一下,表示清除所有 配对记录,然后再长按多 功能 按键直至红蓝灯交替闪动后,打开手机蓝牙配 对连接即可 三、手机蓝牙与 耳机蓝牙版本不兼容. 这个无法解决,建议 找耳机卖家进行退换货.

富民县19524099696: 安卓系统怎么设置用蓝牙接电话? -
当涂府杏灵: 1、首先打开拨号界面,按手机物理菜单键.在菜单功能中点击设置. 2、下拉找到更多电话设置. 3、进入自动接听选项,点击启用. 4、可以看到四个接听场景选项,这里选择“仅有蓝牙连接时”即可.

富民县19524099696: 安卓系统怎么用蓝牙发软件 -
当涂府杏灵: 从应用市场下载ES文件管理器,找到要发送的软件,分享,选择蓝牙,再选择蓝牙设备.

富民县19524099696: android蓝牙4.0怎么设置蓝牙写权限 -
当涂府杏灵: 基本步骤:获取蓝牙适配器BluetoothAdapter blueadapter=BluetoothAdapter.getDefaultAdapter(); 如果BluetoothAdapter 为null,说明android手机没有蓝牙模块.判断蓝牙模块是否开启,blueadapter.isEnabled() true表示已经开启,false表示...

富民县19524099696: 怎样把Android蓝牙与其它系统的蓝牙连接&传输文件?
当涂府杏灵: 首先确认你的手机系统是android2.1以上,早期的android1.5、1.6是不支持蓝牙传输文件的,第二步到网上下载一个android蓝牙文件传输软件(比如Bluetooth File Transfer),apk文件,在手机上安装后就可以实现文件传输

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网