android 连接蓝牙模块教程附源码

本文介绍如何在Android应用中连接蓝牙模块,包括蓝牙连接、数据收发及异常处理。通过创建BluetoothService类,实现连接、接收和发送数据的线程。遇到的问题包括蓝牙数据接收的同步、UUID的理解、客户端与服务器角色的确定以及数据完整性保证。通过设置协议标识来确保数据的完整读取。源码链接提供在文章末尾。
摘要由CSDN通过智能技术生成

由于最近项目需要连接蓝牙,类似于智能手环连接蓝牙模块,网上找了些教程,有一些零零散散的程序,自己于是也写了一个能用,然后我发现谷歌有一个蓝牙的sample,一对比突然发现自己写的好low,不严谨。于是就直接 谷歌 例程,修改了部分。首先当初写的时候我有以下几个疑问。

1.如何实现又蓝牙又能接受数据,又能发送数据,这样不会冲突嘛?
2.UUID是啥,蓝牙模块的uuid又是啥?
3.网上程序有客户端又有服务器的蓝牙程序,那我app用的是哪个程序那,蓝牙模块那边不是app不能写程序又怎样?
4.app不断接受数据,我这边怎么判断为一整段数据,并拿来解析。因为在inputSteam.read()这里如果蓝牙没有数据收到的话会出现阻塞的情况,并且一段数据可能多次读取,并不会一次读取完

答案在文章底部揭晓,想直接看答案直接拉到最后。有耐心的可以先看下文,首先我们新建一个BluetoothService类,看看构造器先

public BluetoothChatService(Context context, Handler handler) {
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        mState = STATE_NONE;//蓝牙状态
        mHandler = handler;//用来更新ui
    }

上面蓝牙状态分为3种,分别用来判断当前状态

public static final int STATE_NONE = 0;       // we're doing nothing
public static final int STATE_CONNECTING = 2; // now initiating an outgoing connection
public static final int STATE_CONNECTED = 3;  // now connected to a remote device

接下来就是connect()方法了。也就是启动连接

/**
     * Start the ConnectThread to initiate a connection to a remote device.
     *
     * @param device The BluetoothDevice to connect
     * @param secure Socket Security type - Secure (true) , Insecure (false)
     */
    public synchronized void connect(BluetoothDevice device, boolean secure) {
        // 取消之前线程,假设之前有打开过线程
        if (mState == STATE_CONNECTING) {
            if (mConnectThread != null) {
                mConnectThread.cancel();
                mConnectThread = null;
            }
        }

        // Cancel any thread currently running a connection
        if (mConnectedThread != null) {
            mConnectedThread.cancel();
            mConnectedThread = 
  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值