Android蓝牙通信
来源:互联网 发布:手机系统数据恢复 编辑:程序博客网 时间:2024/06/10 08:58
这里使用的是RFCOMM协议,RFCOMM是一个简单的串行线性仿真协议,此协议提供RS232控制和状态信号。
也就是一个串口(COM)传输协议,波特率为9600,8位数据。所以手机蓝牙可以与另外的蓝牙设备进行通信。
两个设备进行通信,需要建立一个服务端和一个服务端,客户端连接上服务端之后,就可以收发数据。
源代码下载地址:http://download.csdn.net/detail/menghnhhuan/3901081
- /* 一些常量,代表服务器的名称 */
- public static final String PROTOCOL_SCHEME_L2CAP = "btl2cap";
- public static final String PROTOCOL_SCHEME_RFCOMM = "btspp";
- public static final String PROTOCOL_SCHEME_BT_OBEX = "btgoep";
- public static final String PROTOCOL_SCHEME_TCP_OBEX = "tcpobex";
- private BluetoothServerSocket mserverSocket = null;
- private ServerThread startServerThread = null;//开启服务线程
- private clientThread clientConnectThread = null;//客户端连接线程
- private BluetoothSocket socket = null;
- private BluetoothDevice device = null;
- private readThread mreadThread = null;//读取数据线程
- private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//蓝牙适配器
/* 一些常量,代表服务器的名称 */public static final String PROTOCOL_SCHEME_L2CAP = "btl2cap";public static final String PROTOCOL_SCHEME_RFCOMM = "btspp";public static final String PROTOCOL_SCHEME_BT_OBEX = "btgoep";public static final String PROTOCOL_SCHEME_TCP_OBEX = "tcpobex";private BluetoothServerSocket mserverSocket = null;private ServerThread startServerThread = null;//开启服务线程private clientThread clientConnectThread = null;//客户端连接线程private BluetoothSocket socket = null;private BluetoothDevice device = null;private readThread mreadThread = null;//读取数据线程private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//蓝牙适配器
开启服务端代码
- startServerThread = new ServerThread();
- startServerThread.start();
startServerThread = new ServerThread();startServerThread.start();
开启客户端
- device = mBluetoothAdapter.getRemoteDevice(address);
- clientConnectThread = new clientThread();
- clientConnectThread.start();
device = mBluetoothAdapter.getRemoteDevice(address);clientConnectThread = new clientThread();clientConnectThread.start();
服务端代码
- //开启服务器
- private class ServerThread extends Thread {
- public void run() {
- try {
- /* 创建一个蓝牙服务器
- * 参数分别:服务器名称、UUID */
- mserverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM,
- UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
- Log.d("server", "wait cilent connect...");
- /* 接受客户端的连接请求 */
- socket = mserverSocket.accept();
- Log.d("server", "accept success !");
- //启动接受数据
- mreadThread = new readThread();
- mreadThread.start();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- };
//开启服务器private class ServerThread extends Thread { public void run() {try {/* 创建一个蓝牙服务器 * 参数分别:服务器名称、UUID */mserverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM,UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));Log.d("server", "wait cilent connect...");/* 接受客户端的连接请求 */socket = mserverSocket.accept();Log.d("server", "accept success !");//启动接受数据mreadThread = new readThread();mreadThread.start();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}};
客户端代码:
- //开启客户端
- private class clientThread extends Thread {
- public void run() {
- try {
- //创建一个Socket连接:只需要服务器在注册时的UUID号
- // socket = device.createRfcommSocketToServiceRecord(BluetoothProtocols.OBEX_OBJECT_PUSH_PROTOCOL_UUID);
- socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
- //连接
- socket.connect();
- //启动接受数据
- mreadThread = new readThread();
- mreadThread.start();
- }
- catch (IOException e)
- {
- Log.e("connect", "", e);
- Message msg = new Message();
- msg.obj = "连接服务端异常!断开连接重新试一试。";
- msg.what = 0;
- LinkDetectedHandler.sendMessage(msg);
- }
- }
- };
//开启客户端private class clientThread extends Thread { public void run() {try {//创建一个Socket连接:只需要服务器在注册时的UUID号// socket = device.createRfcommSocketToServiceRecord(BluetoothProtocols.OBEX_OBJECT_PUSH_PROTOCOL_UUID);socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));//连接socket.connect();//启动接受数据mreadThread = new readThread();mreadThread.start();} catch (IOException e) {Log.e("connect", "", e);Message msg = new Message();msg.obj = "连接服务端异常!断开连接重新试一试。";msg.what = 0;LinkDetectedHandler.sendMessage(msg);} }};
发送和接收数据代码
- //发送数据
- private void sendMessageHandle(String msg)
- {
- if (socket == null)
- {
- Toast.makeText(mContext, "没有连接", Toast.LENGTH_SHORT).show();
- return;
- }
- try {
- OutputStream os = socket.getOutputStream();
- os.write(msg.getBytes());
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- //读取数据
- private class readThread extends Thread {
- public void run() {
- byte[] buffer = new byte[1024];
- int bytes;
- InputStream mmInStream = null;
- try {
- mmInStream = socket.getInputStream();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- while (true) {
- try {
- // Read from the InputStream
- if( (bytes = mmInStream.read(buffer)) > 0 )
- {
- byte[] buf_data = new byte[bytes];
- for(int i=0; i<bytes; i++)
- {
- buf_data[i] = buffer[i];
- }
- String s = new String(buf_data);
- Message msg = new Message();
- msg.obj = s;
- msg.what = 1;
- LinkDetectedHandler.sendMessage(msg);
- }
- } catch (IOException e) {
- try {
- mmInStream.close();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- break;
- }
- }
- }
- }
//发送数据private void sendMessageHandle(String msg) {if (socket == null) {Toast.makeText(mContext, "没有连接", Toast.LENGTH_SHORT).show();return;}try {OutputStream os = socket.getOutputStream(); os.write(msg.getBytes());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//读取数据 private class readThread extends Thread { public void run() { byte[] buffer = new byte[1024]; int bytes; InputStream mmInStream = null; try {mmInStream = socket.getInputStream();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} while (true) { try { // Read from the InputStream if( (bytes = mmInStream.read(buffer)) > 0 ) { byte[] buf_data = new byte[bytes]; for(int i=0; i<bytes; i++) { buf_data[i] = buffer[i]; }String s = new String(buf_data);Message msg = new Message();msg.obj = s;msg.what = 1;LinkDetectedHandler.sendMessage(msg); } } catch (IOException e) { try {mmInStream.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} break; } } } }
- Android 蓝牙开发-蓝牙通信
- Android 蓝牙通信开发(三)蓝牙通信
- Android蓝牙通信
- Android蓝牙通信
- android 蓝牙通信编程
- Android蓝牙通信
- Android 通信--蓝牙
- Android 通信--蓝牙
- Android蓝牙通信
- Android-蓝牙通信
- Android BlueTooth蓝牙通信
- 关于android蓝牙通信
- android蓝牙通信
- android 蓝牙通信编程
- Android蓝牙通信
- android蓝牙通信
- android蓝牙通信
- Android 蓝牙通信
- C/C++中调用api设置mysql连接的编码方式
- Windows 8学习笔记(三)--RichTextBlock和MessageDialog
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
- 引用live555库需要注意地方
- Eclipse快捷键大全
- Android蓝牙通信
- win8应用商店程序开发-保存/读取本地应用程序设置
- RTX实时系统&SMP
- MFC关于*.rc和resource.h文件的巧妙运用
- 批处理——set命令
- 学习mysql(3),索引【认真看,写的很不错】
- keytool+tomcat配置HTTPS双向证书认证
- func_get_args() func_get_arg(offset) func_num_args(); 函数使用
- java中的System类