Android蓝牙通信 .[转]
2012-11-19 09:17
483 查看
这里使用的是RFCOMM协议,RFCOMM是一个简单的串行线性仿真协议,此协议提供RS232控制和状态信号。
也就是一个串口(COM)传输协议,波特率为9600,8位数据。所以手机蓝牙可以与另外的蓝牙设备进行通信。
两个设备进行通信,需要建立一个服务端和一个服务端,客户端连接上服务端之后,就可以收发数据。
源代码下载地址:http://download.csdn.net/detail/menghnhhuan/3901081
![](http://hi.csdn.net/attachment/201112/9/0_1323422061OyPF.gif)
![](http://hi.csdn.net/attachment/201112/9/0_1323422070WE3E.gif)
[html] view plaincopyprint?
/* 一些常量,代表服务器的名称 */ 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();//蓝牙适配器
开启服务端代码
[html] view plaincopyprint?
startServerThread = new ServerThread(); startServerThread.start();
开启客户端
[html] view plaincopyprint?
device = mBluetoothAdapter.getRemoteDevice(address); clientConnectThread = new clientThread(); clientConnectThread.start();
服务端代码
[html] view plaincopyprint?
//开启服务器
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();
}
}
};
客户端代码:
[html] view plaincopyprint?
//开启客户端
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);
}
}
};
发送和接收数据代码
[html] view plaincopyprint?
//发送数据
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;
}
}
}
}
来源:http://blog.csdn.net/menghnhhuan/article/details/7057484
也就是一个串口(COM)传输协议,波特率为9600,8位数据。所以手机蓝牙可以与另外的蓝牙设备进行通信。
两个设备进行通信,需要建立一个服务端和一个服务端,客户端连接上服务端之后,就可以收发数据。
源代码下载地址:http://download.csdn.net/detail/menghnhhuan/3901081
![](http://hi.csdn.net/attachment/201112/9/0_1323422061OyPF.gif)
![](http://hi.csdn.net/attachment/201112/9/0_1323422070WE3E.gif)
[html] view plaincopyprint?
/* 一些常量,代表服务器的名称 */ 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();//蓝牙适配器
开启服务端代码
[html] view plaincopyprint?
startServerThread = new ServerThread(); startServerThread.start();
startServerThread = new ServerThread(); startServerThread.start();
开启客户端
[html] view plaincopyprint?
device = mBluetoothAdapter.getRemoteDevice(address); clientConnectThread = new clientThread(); clientConnectThread.start();
device = mBluetoothAdapter.getRemoteDevice(address); clientConnectThread = new clientThread(); clientConnectThread.start();
服务端代码
[html] view plaincopyprint?
//开启服务器
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 block e.printStackTrace(); } } };
客户端代码:
[html] view plaincopyprint?
//开启客户端
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); } } };
发送和接收数据代码
[html] view plaincopyprint?
//发送数据
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;
}
}
}
}
来源:http://blog.csdn.net/menghnhhuan/article/details/7057484
相关文章推荐
- Android开发之蓝牙通信
- android 蓝牙通信编程讲解
- Android BLE与终端通信(二)——Android Bluetooth基础搜索蓝牙设备显示列表
- android蓝牙开发---与蓝牙模块进行通信
- Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
- Android上的蓝牙通信功能的开发:BluetoothChat例程分析
- android 蓝牙通信
- android 蓝牙 通信 bluetooth
- Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
- [置顶] Android开发之蓝牙通信(一)
- 转载_Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子
- Android 蓝牙通信
- android蓝牙开发---与蓝牙模块进行通信
- Android·蓝牙通信实现
- Android 蓝牙通信——AndroidBluetoothManager
- 5.android蓝牙通信
- Android手机之间的蓝牙通信的代码和原理
- Arduino与Android蓝牙通信笔记
- Android当无线鼠标,通过蓝牙与pc通信,pc端用java写 分类: Android 2015-07-30 09:24 18人阅读 评论(0) 收藏
- android蓝牙开发---与蓝牙模块进行通信