2015-06-21 2 views
5

Я пытаюсь проверить, когда мое устройство связано с автомобилем. Я предполагаю, что автомобиль действует как Bluetooth-гарнитура, поэтому я использовал следующий код в моей деятельности OnCreate:Связь Bluetooth с автомобилем

// Get the default adapter 
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() { 
     public void onServiceConnected(int profile, BluetoothProfile proxy) { 
      Time today = new Time(Time.getCurrentTimezone()); 
      today.setToNow(); 
      if (profile == BluetoothProfile.HEADSET) { 
       mBluetoothHeadset = (BluetoothHeadset) proxy; 

       LogginUtil.logString("BluetoothApp", "Headset event called at " + today.format("%k:%M:%S") + " - " + profile); 
      } else { 
       LogginUtil.logString("BluetoothApp", "Other event called at " + today.format("%k:%M:%S") + " - " + profile); 
      } 
     } 
     public void onServiceDisconnected(int profile) { 
      if (profile == BluetoothProfile.HEADSET) { 
       mBluetoothHeadset = null; 
       Time today = new Time(Time.getCurrentTimezone()); 
       today.setToNow(); 
       LogginUtil.logString("BluetoothApp", "Headset event disconnected at " + today.format("%k:%M:%S")); 
      } 
     } 
    }; 
    // Establish connection to the proxy. 
    mBluetoothAdapter.getProfileProxy(getApplicationContext(), mProfileListener, BluetoothProfile.HEADSET); 

При запуске приложения, с Bluetooth и выключаться, я получаю следующий результат:

Headset event called at "current time" - 1 

Когда я сопряжение устройства с автомобилем я получаю точно такой же вывод:

Headset event called at "current time" - 1 

что мне нужно сделать, чтобы обнаружить, что мое устройство активно подключается через Bluetooth с машина?

Благодарим вас за это, и пусть mw знает, требуется ли вам что-либо еще.

EDIT РАЗЪЯСНЕНИЕ

Только в случае, если мой вопрос в непонятым. Я хочу получать уведомления (только журнал), когда устройство переходит в состояние подключения к автомобилю через Bluetooth. Что-то вроде этого возможно?

+0

Вы пытались подключиться к обычной гарнитуре bluetooth? – bernlim

+0

извинения, просто прочитайте ваш вопрос полностью, но сначала попробуйте только обычную гарнитуру Bluetooth, если будут продолжаться осложнения. – bernlim

+0

Нет, цель игры - подключиться к автомобилю с поддержкой Bluetooth. Если вышеуказанный код является неправильным для этой цели, укажите пункт e в правильном направлении :), @bernlim – Lunchbox

ответ

1

Я не могу попробовать это прямо сейчас, но, возможно, это может работать:

int[] validStates = {BluetoothHeadset.STATE_AUDIO_CONNECTED}; 
List<BluetoothDevice> mConnectedDevices = 
    mBluetoothHeadset.getDevicesMatchingConnectionStates(validStates); 
if (!mConnectedDevices.isEmpty()) { 
    // You've got something connected here 
} 

Источники:

http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html http://developer.android.com/reference/android/bluetooth/BluetoothProfile.html#getConnectedDevices()

+0

См. Мое редактирование. Я думаю, что это сработает, чтобы получить подключенные аудиоустройства Bluetooth. См. Мое редактирование, я подробно объяснил свой вопрос. Пожалуйста, посмотрите, я понял сегодня утром, что может быть немного неясным, спасибо независимо! – Lunchbox

+0

@Lunchbox Я думал, что вы можете поместить этот фрагмент в свой метод 'onServiceConnected' – jlhonora

+0

Я реализовал что-то подобное, код немного отличается. Я уточню свой ответ, как только у меня будет время. Вы указали мне в правильном направлении, так что +1. Благодаря! – Lunchbox

0

Быстрый Google нашел этот ответ, он работал для довольно многих людей, поэтому я уверен, что это сработает для вас. Источник: How to get Bluetooth Headset connection state on application start-up using Android2.2?

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

Я попробую и обновит, если это сработает, спасибо! – Lunchbox

+0

Похоже, что событие не срабатывает при подключении к автомобилю. Я отправлю решение, когда найду его. – Lunchbox