展会信息港展会大全

android设备终端与蓝牙模块(HC-06)的通讯编程思路
来源:互联网   发布日期:2015-09-28 15:58:51   浏览:1096次  

导读:蓝牙模块(HC-06):vcC20cDEo7/pyc+ho7b4vdPK3MC20cDEo7/pt6K5/cC0tcTQxc+itcTKsbryo6zKx8O709Cx2NKq1Nm0tL2...

蓝牙模块(HC-06):

vcC20cDEo7/pyc+ho7b4vdPK3MC20cDEo7/pt6K5/cC0tcTQxc+itcTKsbryo6zKx8O709Cx2NKq1Nm0tL2ot/7O8cb3tsu1xKOsztLDx9a70qrSu7j2sru2z7zgzP221Le9z/vPorXE0a27t77N0NChozwvcD4KPHA+IDwvcD4KPHA+16LS4qO61Npzb2NrZXQuY29ubmVjdCgpo7vWrsewo6zO0sPH0OjSqta00NBibHVldG9vdGhhZGFwdGVyLmNhbmNlbGRpc2NvdmVyeSgpO6Os1eLKx86qwcvNo7X0y9HL98nosbijrLfx1PLBrL3Tv8nE3LvhseS1w7fHs6PC/aOssqLH0sjd0tfKp7DcoaM8L3A+CjxwPiA8L3A+CjxwPsC20cC/qrei1tC1xLy4uPa52Lz8sr3W6KO6PC9wPgo8cD4xoaK/qsb0yta7+snPtcTAttHAuabE3KGjPC9wPgo8cD4yoaLL0cv3uL29/LTm1Nq1xMC20cDJ6LG4oaM8L3A+CjxwPjOhorS0vajAttHAc29ja2V0o6zTyXNvY2tldLvxyKFkZXZpY2WhozwvcD4KPHA+NKGit6LLzbrNtsHIocr9vt2hozwvcD4KPHA+NaGix+WzoaOots+/qrj31tbP37PMo6zXos/6ueOypb3TytXG97XIo6k8L3A+CjxwPiA8L3A+CjxwPi8v1vfP38z1PC9wPgo8cD5BZGFwdGVyICAtLS0tPiAgIGRldmljZSAgLS0tLS0+ICBzb2NrZXQ8L3A+CjxwPiA8L3A+Cgo8cD4vKiBzdGVwMTrIobXDxKzIz7XEwLbRwMrKxeTG9yAqLzwvcD4KPHByZSBjbGFzcz0="brush:java;">private BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter();

//step2:强制开启蓝牙设备

if(!mBtAdapter.isEnabled()){

mBtAdapter.enable();

}

//step3:注册广播接收器,注意:开启step4即搜索设备前,应先注册广播接收器

reg_broadcastreceiver();

private void reg_broadcastreceiver(){

//Register for broadcasts when a device is discovered

IntentFilter discoveryFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

this.registerReceiver(mReceiver, discoveryFilter);

//System.out.println("***********" + mBtAddress);

//Register for broadcasts when discovery has finished

IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

this.registerReceiver(mReceiver, foundFilter);

}

// The BroadcastReceiver that listens for discovered devices and

// changes the title when discovery is finished

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

// When discovery finds a device

if (BluetoothDevice.ACTION_FOUND.equals(action))

{

// Get the BluetoothDevice object from the Intent

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

Log.d("BroadcastReceiver", "find device:"+device.getName()+"|"+device.getAddress());

mBtAddress = device.getAddress();

//step5:根据搜索到的蓝牙设备的MAC地址,得到该设备

mBtDevice = mBtAdapter.getRemoteDevice(mBtAddress);

//step6:开启客户端线程,线程里面完成了与SPP协议的连接

mBtClientConnectThread = new clientThread();

mBtClientConnectThread.start();

}// When discovery is finished, change the Activity title

else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))

{

setTitle("搜索完成");

Log.d("BroadcastReceiver", "find over");

}

}

};

//step4: 开始搜索附近可以存在的蓝牙设备,之后系统会发送广播给广播接收器

mBtAdapter.startDiscovery();

//附加客户端线程 代码

//客户端线程

private class clientThread extends Thread{

public void run(){

Log.d("mBtSocket", "start-->"+mBtSocket);

try {

//step7,取消搜索设备的动作,否则接下来的设备连接会失败

mBtAdapter.cancelDiscovery();

//step8,根据device获取socket

mBtSocket = mBtDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));

//step9,连接socket

mBtSocket.connect();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

Log.e("connect", "", e);

Log.d("clientThread", "连接失败");

}

Log.d("mBtSocket", "end-->"+mBtSocket);

}

}

//step10,发送数据.

sendMessageHandle(“要发送的数据”);

//step10, 读取数据

(由于接收数据的线程已经打开,所以当有数据到来时,数据就自动赋给变量S了,而此时S就是我们读取的数据 )

//step11,清场(清场动作放在ondestroy里面)

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

//关闭客户端进程,取消广播接收器

shutdownClient();

// Unregister broadcast listeners

this.unregisterReceiver(mReceiver);

//关闭读线程

if(mReadThread != null)

{

mReadThread.interrupt();

mReadThread = null;

}

}

/* 停止客户端连接 */

private void shutdownClient() {

new Thread() {

public void run() {

if(mBtClientConnectThread!=null)

{

mBtClientConnectThread.interrupt();

mBtClientConnectThread= null;

}

if (mBtSocket != null) {

try {

mBtSocket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mBtSocket = null;

}

};

}.start();

}

//发送数据

public static void sendMessageHandle(String msg)

{

if (mBtSocket == null)

{

Log.d("----------------------", "没有连接");

return;

}

try {

OutputStream os = mBtSocket.getOutputStream();

os.write(msg.getBytes()); //发送出去的值为:msg

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

附:发送数据和读取数据的代码

//发送数据

public static void sendMessageHandle(String msg)

{

if (mBtSocket == null)

{

Log.d("----------------------", "没有连接");

return;

}

try {

OutputStream os = mBtSocket.getOutputStream();

os.write(msg.getBytes()); //发送出去的值为:msg

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//读取数据

private static class readThread extends Thread {

public void run() {

byte[] buffer = new byte[1024];

int bytes;

InputStream mmInStream = null;

try {

mmInStream = mBtSocket.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

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港