android 开发之 Bluetooth
来源:互联网 发布:java char数组转string 编辑:程序博客网 时间:2024/04/30 10:21
BluetoothSocket tmp =null;
// Get a BluetoothSocket for a connection with the
// given BluetootDevice
try{
tmp= device.createRfcommSocketToServiceRecord
(MY__UUID);
}catch(IOException e)
{
log.e( TAG, "create() failed", e);
}
然后是tmp 赋给 BluetoothSocket,接着调用connect 方法进行
蓝牙设备的连接。
可是BluetoothSocket的connect的方法本身会报很多异常错误
以下根据对蓝牙的一点研究可以通过一下方法解决:
1.先进行蓝牙自动配对,配对成功,通过BluetoothSocket,然
后执行connect()方法。
2. 通过 UUID 获得BluetoothSocket,然后先根据
mDevice.getBondState() 进行判断是否需要配对,最后执行
connect() 方法。
蓝牙连接线程
private class ConnectThread extends Thread
{
String macAddrss="";
public ConnectThread(String mac)
{
macAddress=mac;
}
public void run()
{
connecting=true;
connected=false;
if( mBluetoothAdapter==null)
{
mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
}
mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(macAddress);
mBluetoothAdapter.cancelDiscovery();
try{
socket = mBluetoothDevice.createRfcommSocketToServiceRecord(uuid);
}catch{IOException e}
Log.e(TAG, "Socket", e);
}
while(!connected && connetTime<=10)
{
connectDevice();
}
public void cancel()
{
try{
socket.close();
socket=null;
}catch(Exception e)
{
e.printStackTrace();
}finally{
connecting=false;
}
}
}
接下来是调用的是连接 设备的方法 connectDevice();
protected void connectDevice()
{
try{
// 连接建立之前的先配对
if(mBluetoothDevice.getBondState()== BluetoothDevice.BOND_NONE)
{
Method creMethod= BluetoothDevice.class.getMethod("createBond");
creMethod.invoke(mBluetoothDevice);
}else{
}
}catch(Exception e) {
// TODO: handle exception
//DisplayMessage("无法配对!");
e.printStackTrace();
}
mBluetoothAdapter.cancelDiscovery();
try{
socket.connet();
//DisplayMessage("连接成功!");
//connetTime++;
connected = true;
} catch (IOException e) {
// TODO: handle exception
//DisplayMessage("连接失败!");
connetTime++;
connected = false;
try {
socket.close();
socket = null;
} catch (IOException e2) {
// TODO: handle exception
Log.e(TAG, "Cannot close connection when connection failed");
}
} finally {
connecting = false;
}
}
方法3.利用反射通过端口获得BluetoothSocket,然后执行connect()方法。
/** * <p> * 蓝牙连接线程 * </p> * * @author lsw * */ private class ConnectThread extends Thread { String macAddress = ""; public ConnectThread(String mac) { macAddress = mac; } public void run() { connecting = true; connected = false; if(mBluetoothAdapter == null){ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); } mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(macAddress); mBluetoothAdapter.cancelDiscovery(); initSocket(); //adapter.cancelDiscovery(); while (!connected && connetTime <= 10) { try { socket.connect(); connected = true; } catch (IOException e1) { connetTime++; connected = false; // 关闭 socket try { socket.close(); socket = null; } catch (IOException e2) { //TODO: handle exception Log.e(TAG, "Socket", e2); } } finally { connecting = false; } //connectDevice(); } // 重置ConnectThread //synchronized (BluetoothService.this) { //ConnectThread = null; //} } public void cancel() { try { socket.close(); socket = null; } catch (Exception e) { e.printStackTrace(); } finally { connecting = false; } } }
接下来是初始化并得到BluetoothSocket的方法
/** * 取得BluetoothSocket */ private void initSocket() { BluetoothSocket temp = null; try { Method m = mBluetoothDevice.getClass().getMethod( "createRfcommSocket", new Class[] { int.class }); temp = (BluetoothSocket) m.invoke(mBluetoothDevice, 1);//这里端口为1 } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } socket = temp; }
要点:1.蓝牙配对和连接是两回事,不可混为一谈。
2.蓝牙串口连接可通过端口 (1-30)和UUID两种方法进行操作。
3.通过UUID进行蓝牙连接最好先进行配对操作。
- android 开发之 Bluetooth
- 【Android 应用开发】Android之Bluetooth编程
- Android学习之Bluetooth开发总结
- Android学习之Bluetooth开发总结
- Android学习之Bluetooth开发总结
- android Bluetooth 开发3之数据通信界面
- Android开发之蓝牙(Bluetooth)
- android bluetooth开发
- Android Bluetooth开发
- BlueTooth Android开发基础
- Android bluetooth 开发
- Android bluetooth开发
- Android BlueTooth开发
- Android Bluetooth开发1
- Android bluetooth开发实践
- android Bluetooth蓝牙开发
- 07.Android之Bluetooth
- Android通信之 Bluetooth
- Json-lib-----2、对象与Json间转换
- 移动端前端开发调试
- POJ 1222 EXTENDED LIGHTS OUT (异或消元)
- 回车与换行的区别
- [Leetcode]Reverse Words in a String
- android 开发之 Bluetooth
- HBase与MongDB等NoSQL数据库对比
- 大型数据库分析-R语言
- 让树莓派每次开机启动时自动发邮件报告时间和ip信息
- Android-网络编程
- UVa-340 - Master-Mind Hints
- Lesson3.2 variables
- HttpClient-----1、使用HTTP的GET方式读取网络数据
- ios中借鉴别的app的图片