由於近期正在開發一個通過藍牙進行數據傳遞的模塊,在參考了有關資料,並詳細閱讀了Android的官方文檔後,總結了Android中藍牙模塊的使用。
1. 使用藍牙的響應權限
- <uses-permission android:name="android.permission.BLUETOOTH" />
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
2. 配置本機藍牙模塊
在這裡首先要了解對藍牙操作一個核心類BluetoothAdapter
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- //直接打開系統的藍牙設置面板
- Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
- startActivityForResult(intent, 0x1);
- //直接打開藍牙
- adapter.enable();
- //關閉藍牙
- adapter.disable();
- //打開本機的藍牙發現功能(默認打開120秒,可以將時間最多延長至300秒)
- discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);//設置持續時間(最多300秒)Intent discoveryIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
3.搜索藍牙設備
使用BluetoothAdapter的startDiscovery()方法來搜索藍牙設備
startDiscovery()方法是一個異步方法,調用後會立即返回。該方法會進行對其他藍牙設備的搜索,該過程會持續12秒。該方法調用後,搜索過程實際上是在一個System Service中進行的,所以可以調用cancelDiscovery()方法來停止搜索(該方法可以在未執行discovery請求時調用)。
請求Discovery後,系統開始搜索藍牙設備,在這個過程中,系統會發送以下三個廣播:
ACTION_DISCOVERY_START:開始搜索
ACTION_DISCOVERY_FINISHED:搜索結束
ACTION_FOUND:找到設備,這個Intent中包含兩個extra fields:EXTRA_DEVICE和EXTRA_CLASS,分別包含BluetooDevice和BluetoothClass。
我們可以自己注冊相應的BroadcastReceiver來接收響應的廣播,以便實現某些功能
- // 創建一個接收ACTION_FOUND廣播的BroadcastReceiver
- private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- // 發現設備
- if (BluetoothDevice.ACTION_FOUND.equals(action)) {
- // 從Intent中獲取設備對象
- BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
- // 將設備名稱和地址放入array adapter,以便在ListView中顯示
- mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
- }
- }
- };
- // 注冊BroadcastReceiver
- IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
- registerReceiver(mReceiver, filter); // 不要忘了之後解除綁定