linux蓝牙串口通信丢数据,Android蓝牙串口通信模板及小trick

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地址传输信息的模板,通用搜索模式日后再补删模板:

privateBluetoothAdapter mBluetoothAdapter =null;

privateBluetoothSocket btSocket =null;

privateOutputStream outStream =null;

privateInputStream inStream =null;

privatestaticfinalUUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//这条是蓝牙串口通用的UUID,不要更改

privatestaticString 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();

inStream = btSocket.getInputStream(); //可在TextView里显示

} 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);

}

*/0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值