Android藍芽開發

來源:互聯網
上載者:User

標籤:android   藍芽   

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是可行的,其他的裝置未測試

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android藍芽開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.