前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android蓝牙开发(二)之蓝牙配对和蓝牙连接

Android蓝牙开发(二)之蓝牙配对和蓝牙连接

作者头像
黄林晴
发布2019-01-10 14:47:35
4.3K0
发布2019-01-10 14:47:35
举报
文章被收录于专栏:代码男人

上篇文章:https://cloud.tencent.com/developer/article/1382282

讲解了打开蓝牙设备和搜索蓝牙设备,这篇文章来讲解蓝牙配对和蓝牙连接

1.蓝牙配对

   搜索到蓝牙设备后,将设备信息填充到listview中,点击listiew则请求配对

  蓝牙配对有点击配对和自动配对,点击配对就是我们选择设备两个手机弹出配对确认框,点击确认后配对

  自动配对就是搜索到蓝牙设备后自动配对不需要输入pin码,但在基本开发中都不采用这种方式,所以这里说的是第一种配对方式

  点击配对,调用

代码语言:javascript
复制
BluetoothDevice.class.getMethod

进行配对,代码如下:

代码语言:javascript
复制
Method method = BluetoothDevice.class.getMethod("createBond");
Log.e(getPackageName(), "开始配对");
method.invoke(listdevice.get(position));

invoke传的参数就是要配对的设备(我这里是存在list中所以从list中取)

点击之后怎会弹出配对确认框,且必须被配对的手机也点击确认配对才可以配对成功如图:

同样的,如果我们想要配对的设备取消配对

代码语言:javascript
复制
只需要将creatBond改为removeBond

2.蓝牙连接:

  配对成功之后,就可以进行蓝牙连接了,蓝牙连接操作比较耗时,可以在一个线程中进行:

调用自己定义的

代码语言:javascript
复制
connect(listdevice.get(position));

同样传递的参数也是设备device

首先声明蓝牙套接字:

代码语言:javascript
复制
private BluetoothSocket mBluetoothSocket;
代码语言:javascript
复制
mBluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(BltContant.SPP_UUID);

BltContant.SPP_UUID是一个UUID常量,至于UUID是什么,大家可以自行百度,因为详细的文章已经很多了。

连接的时候要先判断蓝牙是否在扫描,如果在扫描就停止扫描,并且没有连接才进行连接,代码如下:

代码语言:javascript
复制
if (bluetoothadapter.isDiscovering()) {
    bluetoothadapter.cancelDiscovery();
}
if (!mBluetoothSocket.isConnected()) {
    mBluetoothSocket.connect();
}

比如我们让其连接成功后,跳转到消息通讯界面,界面中有edittext输入框并显示当前连接的设备名称如图所示:

在这里我们需要注意的是,当连接成功时,我们要让被连接的那部手机也自动跳转到聊天页面,所以我们要开启蓝牙服务端等待设备的连接,当设备连接时,自动跳转页面,蓝牙服务端代码如下:

代码语言:javascript
复制
/**
 * 开启服务端
 */
public void startBluService() {

    while (true) {
        try {
            if (getBluetoothServerSocket() == null){
                Log.e("在这里获取的为空","在这里获取的为空");
            }
            bluetoothSocket = getBluetoothServerSocket().accept();
            if (bluetoothSocket != null) {
                APP.bluetoothSocket = bluetoothSocket;
                EventBus.getDefault().post(new BluRxBean(SERVER_ACCEPT, bluetoothSocket.getRemoteDevice()));
                //如果你的蓝牙设备只是一对一的连接,则执行以下代码
                getBluetoothServerSocket().close();
                //如果你的蓝牙设备是一对多的,则应该调用break;跳出循环
                //break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务端运行也在一个线程中,一直处于等待状态直到有设备连接进来。

下篇文章 蓝牙通信:https://cloud.tencent.com/developer/article/1382280

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.蓝牙配对
  • 2.蓝牙连接:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档