Android蓝牙之聊天

本文介绍了如何在Android设备间通过蓝牙实现文字聊天功能。首先,文章提及蓝牙在智能设备数据传输中的广泛应用,如智能手环、电子秤等。接着,作者详细讲解了蓝牙聊天工具的实现过程,包括连接流程:开启线程获取socket连接、监听蓝牙连接和处理数据传输。通过这种方式,两个手机可以互为主机和从机进行通信。文章提供了源码链接,帮助读者更好地理解和实现蓝牙聊天功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蓝牙,时下最流行的智能设备传输数据的方式之一,通过手机app和智能设备进行连接,获取设备上的测量数据,我们生活中随处可见的比如蓝牙智能手环,蓝牙电子秤,蓝牙心电测量设备等等。
本篇我将紧接着上篇结尾所写,一起来看下手机之间如何通过蓝牙实现文字聊天,
先贴出上篇的一些demo;
这里写图片描述

当点击图上的两个列表中的任何一个列表,执行如下代码:

mBtAdapter.cancelDiscovery();
String info = ((TextView) v).getText().toString();
String address = info.substring(info.length() - 17);
Intent intent = new Intent();
intent.putExtra(EXTRA_DEVICE_ADDRESS, address);
setResult(Activity.RESULT_OK, intent);
finish();

此蓝牙聊天工具最后实现的效果是这样的:
这里写图片描述
将回到聊天主界面:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
   LogUtils.getInstance().e(getClass(), "onActivityResult " + resultCode);
   switch (requestCode) {
    case REQUEST_CONNECT_DEVICE:
        // 当DeviceListActivity返回与设备连接的消息
         if (resultCode == Activity.RESULT_OK) {
         // 连接设备的MAC地址
         String address = data.getExtras().getString(
        DeviceListActivity.EXTRA_DEVICE_ADDRESS);
        // 得到蓝牙对象
        BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
        // 开始连接设备
        mChatService.connect(device);
        }
        break;
    case REQUEST_ENABLE_BT:
        // 判断蓝牙是否启用
        if (resultCode == Activity.RESULT_OK) {
        // 建立连接
        setupChat();
        } else {
        LogUtils.getInstance().e(getClass(), "蓝牙未启用");
        Toast.makeText(this, R.string.bt_not_enabled_leaving,
        Toast.LENGTH_SHORT).show();
        finish();
        }
   }
}

在此,我将重点介绍下BluetoothChatService类中的连接流程;
因为蓝牙聊天是两个手机之间进行通讯,所以他们互为主机和从机,主要思路以及步骤如下:
1.开一个线程获取socket去连接蓝牙;
2.开一个线程获监听蓝牙传入的连接,如果连接被接受的话,再开启第三个线程去处理所有传入和传出的数据;

public synchronized void connect(BluetoothDevice device) {
    if (mState == STATE_CONNECTING) {
        if (mConnectThread != null) {
            mConnectThread.cancel();
            mConnectThread = null;
        }
    }
    if (mConnectedThread != null) {
        mConnectedThread.cancel();
        mConnectedThread = null;
    }
    mConnectThread = new ConnectThre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值