今天在做項目的時候,需要監聽一個藍牙耳機的連接狀態。就寫了一個小的測試方法。記錄如下
看代碼
這要處理的是藍牙監聽事件
package com.example.alert; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothProfile; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; public class HeadsetPlugReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) { Log.e("123", "BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED"); } else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { Log.e("123", "BluetoothAdapter.ACTION_STATE_CHANGED"); int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); switch (state) { case BluetoothAdapter.STATE_OFF: Log.e("123", "BluetoothAdapter.STATE_OFF"); break; case BluetoothAdapter.STATE_TURNING_ON: Log.e("123", "BluetoothAdapter.STATE_TURNING_ON"); break; case BluetoothAdapter.STATE_ON: Log.e("123", "BluetoothAdapter.STATE_ON"); break; case BluetoothAdapter.STATE_TURNING_OFF: Log.e("123", "BluetoothAdapter.STATE_TURNING_OFF"); break; } } else if (action .equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)) { Log.e("123", "BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED"); int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1); switch (state) { case BluetoothProfile.STATE_DISCONNECTED: Log.e("123", "BluetoothProfile.STATE_DISCONNECTED"); break; case BluetoothProfile.STATE_CONNECTING: Log.e("123", "BluetoothProfile.STATE_CONNECTING"); break; case BluetoothProfile.STATE_CONNECTED: Log.e("123", "BluetoothProfile.STATE_CONNECTED"); break; case BluetoothProfile.STATE_DISCONNECTING: Log.e("123", "BluetoothProfile.STATE_DISCONNECTING"); break; } } } }
藍牙的監聽,需要加入權限,如下
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
下面是我們打印的結果
1.沒有藍牙耳機連接的情況下
藍牙從斷開到連接
1 09-21 11:45:27.223: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED 2 09-21 11:45:27.223: E/123(15118): BluetoothAdapter.STATE_TURNING_ON 3 09-21 11:45:27.707: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED 4 09-21 11:45:27.708: E/123(15118): BluetoothAdapter.STATE_ON
從連接到斷開
1 09-21 11:49:09.126: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED 2 09-21 11:49:09.126: E/123(15118): BluetoothAdapter.STATE_TURNING_OFF 3 09-21 11:49:09.271: E/123(15118): BluetoothAdapter.ACTION_STATE_CHANGED 4 09-21 11:49:09.271: E/123(15118): BluetoothAdapter.STATE_OFF
2.有藍牙耳機連接的情況
關閉藍牙耳機(藍牙保持打開)
1 09-21 22:12:15.439: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED 2 09-21 22:12:15.449: E/123(17042): BluetoothProfile.STATE_DISCONNECTED 3 09-21 22:12:16.457: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED
連接藍牙耳機
1 09-21 22:14:22.356: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED 2 09-21 22:14:22.356: E/123(17042): BluetoothProfile.STATE_CONNECTED 3 09-21 22:14:22.357: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED
關閉藍牙
1 09-21 22:15:12.558: E/123(17042): BluetoothAdapter.ACTION_STATE_CHANGED 2 09-21 22:15:12.559: E/123(17042): BluetoothAdapter.STATE_TURNING_OFF 3 09-21 22:15:13.557: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED 4 09-21 22:15:13.557: E/123(17042): BluetoothProfile.STATE_DISCONNECTED 5 09-21 22:15:13.908: E/123(17042): BluetoothAdapter.ACTION_STATE_CHANGED 6 09-21 22:15:13.908: E/123(17042): BluetoothAdapter.STATE_OFF
打開藍牙
1 09-21 22:16:06.976: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED 2 09-21 22:16:06.976: E/123(17042): BluetoothProfile.STATE_CONNECTING 3 09-21 22:16:06.978: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED 4 09-21 22:16:07.036: E/123(17042): BluetoothAdapter.ACTION_STATE_CHANGED 5 09-21 22:16:07.036: E/123(17042): BluetoothAdapter.STATE_ON 6 09-21 22:16:10.616: E/123(17042): BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED 7 09-21 22:16:10.616: E/123(17042): BluetoothProfile.STATE_CONNECTED 8 09-21 22:16:10.619: E/123(17042): BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED
從上面的結果我們能夠明白藍牙監聽相關事件
的職責
1.BluetoothAdapter.ACTION_STATE_CHANGED:這個主要是用來監聽藍牙打開與否的狀態,它穿過來的參數包含藍牙正在斷開、斷開、正在連接、連接的狀態,每次狀態更改,都會觸發這個廣播
2.BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:這個主要是監聽藍牙設備連接狀態。它同樣包含四種狀態
3.BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED:這個就是監聽藍牙耳機的連接狀態了。
至於他們監聽的順序,目前還不大清楚,似乎沒有一個嚴格的先后順序。就是感覺是
如果設備處於連接狀態,優先級比較高
如果設備處於斷開狀態,它的存在條件優先級比較高