首页 > 编程知识 正文

android实现蓝牙通信,android 蓝牙传输

时间:2023-05-05 21:34:35 阅读:196415 作者:2274

首先是此部分涉及到的类 BluetoothAdapter 蓝牙适配器,即该类里面包含了蓝牙使用中常用到的一些API。BroadcastReceiver 广播接收者,不难猜测,蓝牙设备开启或者关闭、搜索到周边设备就要来通知应用,那么Android系统就会以广播的方式来通知。BluetoothDevice 蓝牙设备,即一个相当于蓝牙设备的类,实现了Parcelable接口,用于Android的IPC通信机制。里面实在广播时发送的蓝牙的相关信息:蓝牙名称,地址,类型和uuid等。 蓝牙配对操作 public void makePair(Context context, String address, MakePariBlueToothListener mMakePariListener) throws Exception { this.mMakePariListener = mMakePariListener; this.context = context; IntentFilter iFilter = new IntentFilter( BluetoothDevice.ACTION_BOND_STATE_CHANGED); context.registerReceiver(mSearchReceiver, iFilter); enableBlueTooth(); BluetoothDevice device = BTadapter.getRemoteDevice(address); device.createBond(); }

在蓝牙配对过程中,设备会以广播的方式告知应用配对的过程和结果如:配对开始、配对成功与失败、配对结束等,所以这里创建一个MakePariBlueToothListener 的配对监听器的接口,在配对的广播中调用监听器的各个结果由用户处理配对结果。所以要传递一个配对监听器的对象,还有注册广播接收者。
之后依据对方蓝牙地址,获取蓝牙设备对象BluetoothDevice,调用Android的api的device.createBond()方法开始蓝牙配对,之后再以广播的方式获取到配对结果。

public interface MakePariBlueToothListener { public void whilePari(BluetoothDevice device); public void pairingSuccess(BluetoothDevice device); public void cancelPari(BluetoothDevice device);}

在开始配对后调用whilePari( )方法,并将配对的蓝牙设备对象返回给调用者。
在配对成功后调用pairingSuccess( )方法,也将配对的蓝牙设备对象返回给调用者。
在配对失败或者取消后调用cancelPari( )方法,也将配对的蓝牙设备对象返回给调用者。

广播接收者的处理:

private BroadcastReceiver mSearchReceiver = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub String action = arg1.getAction(); switch (action) { case BluetoothDevice.ACTION_BOND_STATE_CHANGED: device = arg1.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); switch (device.getBondState()) { case BluetoothDevice.BOND_BONDING:// 正在配对 mMakePariListener.whilePari(device); break; case BluetoothDevice.BOND_BONDED:// 配对结束 mMakePariListener.pairingSuccess(device); break; case BluetoothDevice.BOND_NONE:// 取消配对/未配对 mMakePariListener.cancelPari(device); default: break; } break; } } };

在广播接收者中,接收到ACTION_BOND_STATE_CHANGED的广播时,说明配对时蓝牙设备的关系状态发生改变,依据改变的状态,调用之前的蓝牙配对监听器的不同方法。
在收到BOND_BONDING的状态时说明开始配对了,就调用监听器的whilePari( )方法。
接收到BOND_BONDED的状态时说明已经配对了,并且配对成功了,就可以调用监听器的pairingSuccess( )方法。
接收到BOND_NONE就表示配对失败了,或者是配对取消了,就可以调用监听器的cancelPari( )方法。
统一由用户做出不同的相应操作。

蓝牙连接与接收数据操作 public BluetoothSocket getBluetoothSocket(String address) throws IOException { BluetoothDevice device = BTadapter.getRemoteDevice(address); BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID .fromString(BlueTooth.MY_UUID)); return socket; }

首先依据对方的蓝牙地址获取蓝牙设备对象,再从蓝牙设备对象中获取设备连接的Socket,而UUID是由Android设备统一的蓝牙的通用唯一识别码 ,获取到socket后就可以直接在socket中得到对应的输入流和输出流了

socket.connect();InputStream is = socket.getInputStream();

这里就是先通过socket建立连接后,获取一个输入流的对象,之后就流的操作了,也不再多说了。

下面贴出整合蓝牙操作的Java源代码:
码云链接:https://gitee.com/D_inasour/codes/8c5yt4nd2xb9uzml10h7e16
csdn资源链接:http://download.csdn.net/download/d_inosaur/9946750

欢迎入门学习交流,系统收费0.1,勿在意:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。