Android蓝牙开发

最近做蓝牙小车,需要Android端来控制小车的运动,以此文记录开发过程。使用HC-06无线蓝牙串口透传模块。对于其他的蓝牙设备本文同样适用。
蓝牙开发的流程:
获取本地蓝牙适配器 ——> 打开蓝牙 ——> 搜索设备 ——> 连接设备 ——> 发送信息
首先为了避免以往我们先写入蓝牙权限:
<uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

要用到的蓝牙对象:
private BluetoothAdapter adapter = null;//用于获取蓝牙适配器private BluetoothDevice mBtDevice = null;//用于获取蓝牙设备private BluetoothSocket mBtSocket = null;//用于建立通信


获取蓝牙适配器:


adapter = BluetoothAdapter.getDefaultAdapter();


打开蓝牙:

boolean enabled = adapter.enable();if(!enabled){        adapter.enable();}

搜索设备:


adapter.startDiscovery();


搜索到的设备会以广播的形式返回,所以我们需要定义一个广播接收器:
private BroadcastReceiver blueRevever = new BroadcastReceiver(){@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if(action.equals(BluetoothDevice.ACTION_FOUND)){BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if(device.getBondState()!=BluetoothDevice.BOND_BONDED){//获取未配对的设备名称和MAC地址//根据搜索到的蓝牙设备的MAC地址,得到该设备mBtDevice = adapter.getRemoteDevice(device.getAddress());  //如果设备名称是指定的设备则给出提示if(device.getName().equals("HC-06")){Toast.makeText(MainActivity.this,device.getName(),Toast.LENGTH_LONG).show();}}else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {Toast.makeText(MainActivity.this,"检测完毕",Toast.LENGTH_LONG).show();}}}};

广播返回不同设备及其所处的状态,getAction()方法用于获取状态,BOND_BONDED表示是已经配对的状态。(注意配对和连接是两个完全不同的概念,配对成功并不是连接成功,仅仅配对成功不能够发送信息)
当然是用广播机制要注意注册广播:
 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);    registerReceiver(blueRevever, filter);    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);    registerReceiver(blueRevever, filter);


连接设备:


因为阻塞连接会阻塞线程,所以我们需要重开一个新的线程用于建立连接:

private class clientThread extends Thread{  public void run(){  try {  //取消搜索设备的动作,否则接下来的设备连接会失败  adapter.cancelDiscovery();  //根据device获取socket  mBtSocket = mBtDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));  //连接socket  mBtSocket.connect();  } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();  Toast.makeText(MainActivity.this,"连接失败!!!!!!!!!",Toast.LENGTH_LONG).show();  }  }  }

此处的UUID用于连接HC-06是可行的,其他的设备未测试
想使用时只需创建一个clientThread对象,然后执行其run()方法即可,如下:
//创建连接的进程Thread mBtClientConnectThread = new clientThread();  //开启进程mBtClientConnectThread.start();  

发送信息:


public void sendMessageHandle(String msg)         {                   if (mBtSocket == null)              {            Toast.makeText(MainActivity.this,"没有连接!!",Toast.LENGTH_LONG).show();                  return;            }                        try {                OutputStream os = mBtSocket.getOutputStream();                 os.write(msg.getBytes()); //发送出去的值为:msg                Toast.makeText(MainActivity.this,"发送成功!!",Toast.LENGTH_LONG).show();          } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();                Toast.makeText(MainActivity.this,"发送失败!!!!!!!!!",Toast.LENGTH_LONG).show();          }                   }






此处的UUID用于连接HC-06是可行的,其他的设备未测试

更多相关文章

  1. 使用User Agent分辨出Android设备类型的安全做法
  2. Android 1.0将不支持开发蓝牙和Gtalk应用
  3. Ionic2 在Android设备上的部署
  4. 通过JavaScript或PHP检测Android设备的代码
  5. Android获取WIFI状态下的IP地址以及MAC地址
  6. Android网络状态监听
  7. Android 判断程序前后台状态

随机推荐

  1. 手把手教你学PHP,学习心得分享!!
  2. 详解PHP中PHP-FPM是什么?有什么用?
  3. 带你了解php的三个常用框架:thinkphp、yaf
  4. PHP解析XML的几种方法(附代码)
  5. 示例Ajax异步传输与PHP实现交互
  6. 一起看看php实现购物车产品删除功能(2)
  7. 详解PHP基础算法:冒泡、选择、插入、快速
  8. php之接口与前端数据交互实现示例代码
  9. 一起看看php实现产品加入购物车功能(1)
  10. 了解php操作redis的几种常用方法