大家好!是不是已经厌倦了图形化编程软件,那我们今天来用另一个软件来学习蓝牙APP,从不同的角度和不同的工具来学习同一个APP,会让我们对自己所学的东西更加牢固,同时也有助于加深我们对所学内容的了解。好!我们进入正题:
目录
(一)、蓝牙搜索
1.1权限
1.2开启蓝牙
(二)蓝牙连接
(三)、总结
首先蓝牙通信的三个基本步骤:搜索、配对、连接。这之后就可以进行数据传输了。
(一)、蓝牙搜索
1.1权限
在蓝牙通信中需要获取Android系统的以下三个权限,如果不能给APP授予相关的权限会影响蓝牙的正常使用:
BLUETOOTH:允许配对的设备进行连接
BLUETOOTH_ADMIN:允许搜索和配对设备
ACCESS_COARSE_LOCATION:广播接收器接收BluetoothDevice.ACTION_FOUND广播需要改权限
对于这个我的理解就是权限的声明和获得系统相关权限的允许,相对简单,也比较好理解。
1.2开启蓝牙
建立蓝牙通信之前需要验证是否有蓝牙设备,以及蓝牙设备是否已经开启。对于一个Android系统而言只有一个蓝牙适配器,通过getDefaultAdapter()方法可以返回其一个实例,如果返回为null,则说明该设备不支持蓝牙。
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// device doesn’t support Bluetooth
}
这是一个验证程序,他的存在避免了蓝牙不能成功连接而手机APP不能提示用户的问题。
然后是查找已经与本机配对的设备,通过getBondedDevices()方法返回已经配对的设备信息:
Set
if (pariedDevices.size > 0) //如果存在连接设备
{
{
for (BluetoothDevice device: pairedDevices) //请求连接 指令
String deviceName = device.getName(); //蓝牙地址传递
String deviceMACAddress = device.getAddress(); //蓝牙地址赋值
}
}
(二)蓝牙连接
在建立连接时需要一个UUID,UUID是用来标识不同设备的ID,对于蓝牙串口设备而言其对应的UUID是“00001101-0000-1000-8000-00805F9B34FB”。
If you are connecting to a Bluetooth serial board then try using the well-known SPP UUID 00001101-0000-1000-8000-00805F9B34FB
https://developer.android.google.cn/reference/android/bluetooth/BluetoothDevice.html
手机端是作为客户端与蓝牙模块进行连接的。
在蓝牙socket进行connect之前,一定要调用BluetoothAdapter的cancelDiscovery()方法。
连接的第一步是通过调用BluetoothDevice的createRfcommSocketToServiceRecord(UUID)获取BluetoothSocket
.第二步是调用BluetoothSocket的connect()方法发起连接。
String macAddr = “20:15:05:25:02:43”;
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(macAddr); //根据特征值来识别蓝牙。根据UUID来建立联系
UUID uuid = UUID.fromString(“00001101-0000-1000-8000-00805f9b34fb”);
try {
mSocket = device.createRfcommSocketToServiceRecord(uuid);
} catch (IOException e) {
e.printStackTrace();
}
new Thread(){
@Override
public void run() {
mBluetoothAdapter.cancelDiscovery();
try {
mSocket.connect(); //开始连接
} catch (IOException e) {
try {
mSocket.close(); //断开连接
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
super.run();
}
}.start();
确保在建立连接之前始终调用cancelDiscovery(),而且调用时无需实际检查其是否正在运行,如果确实想要执行检查,请调用isDiscovering()。
(三)、总结
从不同的角度和不同的工具来学习同一个APP,会让我们对自己所学的东西更加牢固,同时也有助于加深我们对所学内容的了解这个编程方法虽然比图形化编程复杂,也没有它便捷,但是这种编程方法可以让我们非常彻底的了解其内在的原理。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92460 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!