蓝牙,时下最流行的智能设备传输数据的方式之一,通过手机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 =