Как получить состояние подключения Bluetooth-гарнитуры при запуске приложения с помощью Android2.2? - PullRequest
1 голос
/ 12 декабря 2011

Как получить состояние подключения Bluetooth-гарнитуры (подключен / отключен) с помощью Android Api уровня 8 при запуске приложения? Есть ли в android2.2 какие-либо липкие намерения вещания? Есть ли API для получения начального состояния гарнитуры Bluetooth? Есть ли обходной путь?

Ответы [ 3 ]

3 голосов
/ 04 января 2012

Я разобрался с решением:

private static final String ACTION_BT_HEADSET_STATE_CHANGED  = "android.bluetooth.headset.action.STATE_CHANGED";
private static final int STATE_CONNECTED = 0x00000002; 
private static final int STATE_DISCONNECTED  = 0x00000000;  
private static final String EXTRA_STATE = "android.bluetooth.headset.extra.STATE";

private BroadcastReceiver mBlueToothHeadSetEventReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
    try {
        String action = intent.getAction();

        if(action == null)
            return;

        if(action.equals(ACTION_BT_HEADSET_STATE_CHANGED)){
            int extraData = intent.getIntExtra(EXTRA_STATE  , STATE_DISCONNECTED);
            if(extraData == STATE_CONNECTED ){

                //TODO :

            }else if(extraData == STATE_DISCONNECTED){

                //TODO:
            }
        }
        } catch (Exception e) {

        //TODO:

        }
}
};
0 голосов
/ 22 июля 2014

из пакетов / приложений / телефона / src / com / android / phone / PhoneGlobals.java: 1449

        } else if (action.equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)) {
            mBluetoothHeadsetState = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE,
                                                      BluetoothHeadset.STATE_DISCONNECTED);
            if (VDBG) Log.d(LOG_TAG, "mReceiver: HEADSET_STATE_CHANGED_ACTION");
            if (VDBG) Log.d(LOG_TAG, "==> new state: " + mBluetoothHeadsetState);
            updateBluetoothIndication(true);  // Also update any visible UI if necessary
0 голосов
/ 06 августа 2012

На самом деле это не сработает при запуске приложения, но поскольку фильтры намерений регистрируются автоматически, вы можете иметь действительное значение после запуска приложения:

Объявите следующий фильтр намерений

        <intent-filter >
            <action android:name="android.bluetooth.headset.action.AUDIO_STATE_CHANGED" />
        </intent-filter>

и в вашем Receiver в onReceive проверьте:

if ("android.bluetooth.headset.action.AUDIO_STATE_CHANGED".equals(intent.getAction())) {
  headsetAudioState = intent.getIntExtra("android.bluetooth.headset.extra.AUDIO_STATE", -2);
}

и сохраните int как статическую переменную.Получите доступ к нему в любое время, когда хотите узнать, подключено ли аудио BT (1) / отключено (0).Не красиво, но выполняет свою работу.

Также проверьте: https://github.com/android/platform_frameworks_base/blob/gingerbread/core/java/android/bluetooth/BluetoothHeadset.java

...