WEB开发网
开发学院手机开发Android 开发 Android蓝牙串口通信模板及小trick 阅读

Android蓝牙串口通信模板及小trick

 2012-09-17 20:33:44 来源:WEB开发网   
核心提示: Android蓝牙操作:与蓝牙串口模块通信,或其他蓝牙设备通信,Android蓝牙串口通信模板及小trick,初涉android的蓝牙操作,按照固定MAC地址连接获取Device时,程序始终是异常终止,下面附上Android蓝牙操作中用固定MAC地址传输信息的模板,通用搜索模式日后再补删模板:private Blue

 Android蓝牙操作:与蓝牙串口模块通信,或其他蓝牙设备通信。

初涉android的蓝牙操作,按照固定MAC地址连接获取Device时,程序始终是异常终止,查了好多天代码都没查出原因。今天改了一下API版本,突然就成功连接了。总结之后发现果然是个坑爹之极的错误。
为了这种错误拼命查原因浪费大把时间是非常不值得的,但是问题不解决更是揪心。可惜我百度了那么多,都没有给出确切原因。今天特此mark,希望后来者遇到这个问题的时候能轻松解决。
下面是我的连接过程,中间崩溃原因及解决办法。
1:用AT指令获得蓝牙串口的MAC地址,地址是简写的,按照常理猜测可得标准格式。
2:开一个String adress= "************" //MAC地址, String MY_UUID= "************"//UUID根据通信而定,网上都有。
3:取得本地Adapter用getDefaultAdapter(); 远程的则用getRemoteDevice(adress); 之后便可用UUID开socket进行通信。
如果中途各种在getRemoteDevice处崩溃,大家可以查看一下当前的API版本,如果是2.1或以下版本的话,便能确定是API版本问题,只要换成2.2或者以上就都可以正常运行了~ 这么坑爹的错误的确很为难初学者。 唉·········· 为这种小trick浪费很多时间真是难过。
下面附上Android蓝牙操作中用固定MAC地址传输信息的模板,通用搜索模式日后再补删模板:

	private BluetoothAdapter mBluetoothAdapter = null;

	private BluetoothSocket btSocket = null;

	private OutputStream outStream = null;
	
	private InputStream inStream = null;
	
	private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");  //这条是蓝牙串口通用的UUID,不要更改

	private static String address = "00:12:02:22:06:61"; // <==要连接的蓝牙设备MAC地址
	
	
	/*获得通信线路过程*/
	
	
	/*1:获取本地BlueToothAdapter*/
	mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
	if(mBluetoothAdapter == null) 
	{
		Toast.makeText(this, "Bluetooth is not available.", Toast.LENGTH_LONG).show();
		finish();
		return;
	}
	if(!mBluetoothAdapter.isEnabled()) 
	{
		Toast.makeText(this, "Please enable your Bluetooth and re-run this program.", Toast.LENGTH_LONG).show();
		finish();
		return;
	} 
	 
	/*2:获取远程BlueToothDevice*/ 
 	BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
	if(mBluetoothAdapter == null) 
	{
		Toast.makeText(this, "Can't get remote device.", Toast.LENGTH_LONG).show();
		finish();
		return;
	}
	 
	/*3:获得Socket*/  	
 	try {
		btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
	} catch (IOException e) {

		Log.e(TAG, "ON RESUME: Socket creation failed.", e);

	}
	
	/*4:取消discovered节省资源*/
	mBluetoothAdapter.cancelDiscovery();		
	
	
	/*5:连接*/
	
	try {

		btSocket.connect();

		Log.e(TAG, "ON RESUME: BT connection established, data transfer link open.");

	} catch (IOException e) {

		try {
			btSocket.close();

		} catch (IOException e2) {

			Log .e(TAG,"ON RESUME: Unable to close socket during connection failure", e2);
		}
	} 
		
	/*此时可以通信了,放在任意函数中*/
	/* 	try {
	outStream = btSocket.getOutputStream();

	} catch (IOException e) {
		Log.e(TAG, "ON RESUME: Output stream creation failed.", e);
	}


	String message = "1";

	byte[] msgBuffer = message.getBytes();

	try {
		outStream.write(msgBuffer);

	} catch (IOException e) {
		Log.e(TAG, "ON RESUME: Exception during write.", e);
	}
	*/ 

Tags:Android 蓝牙 串口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接