bluetooth-藍牙事件監聽


今天在做項目的時候,需要監聽一個藍牙耳機的連接狀態。就寫了一個小的測試方法。記錄如下

看代碼

這要處理的是藍牙監聽事件

復制代碼
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:這個就是監聽藍牙耳機的連接狀態了。

至於他們監聽的順序,目前還不大清楚,似乎沒有一個嚴格的先后順序。就是感覺是

如果設備處於連接狀態,優先級比較高

如果設備處於斷開狀態,它的存在條件優先級比較高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM