学习小插曲——好奇心作怪,如果用Android Studio制作蓝牙APP会发生什么事情!蓝牙代码的解释和蓝牙的基本原理

14 篇文章 70 订阅
14 篇文章 23 订阅

大家好!是不是已经厌倦了图形化编程软件,那我们今天来用另一个软件来学习蓝牙APP,从不同的角度和不同的工具来学习同一个APP,会让我们对自己所学的东西更加牢固,同时也有助于加深我们对所学内容的了解。好!我们进入正题:

目录

(一)、蓝牙搜索

               1.1权限

               1.2开启蓝牙

(二)蓝牙连接

(三)、总结

 


首先蓝牙通信的三个基本步骤:搜索、配对、连接。这之后就可以进行数据传输了。

(一)、蓝牙搜索

 

1.1权限


在蓝牙通信中需要获取Android系统的以下三个权限,如果不能给APP授予相关的权限会影响蓝牙的正常使用:
BLUETOOTH:允许配对的设备进行连接
BLUETOOTH_ADMIN:允许搜索和配对设备
ACCESS_COARSE_LOCATION:广播接收器接收BluetoothDevice.ACTION_FOUND广播需要改权限

<uses-permission android:name="android.permission.BLUETOOTH" />                                   //允许配对的设备进行连接
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />                    //允许搜索和配对设备
<uses-permission android:name="android.permission.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<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();  //调用方法
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,会让我们对自己所学的东西更加牢固,同时也有助于加深我们对所学内容的了解这个编程方法虽然比图形化编程复杂,也没有它便捷,但是这种编程方法可以让我们非常彻底的了解其内在的原理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值