2015-06-21 11 views
5

Próbuję sprawdzić, kiedy moje urządzenie jest połączone z samochodem. Zakładam aktów samochodowych takich jak zestaw słuchawkowy Bluetooth, dlatego użyłem następujący kod w mojej działalności onCreate:Połączenie Bluetooth z samochodem

// 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); 

Kiedy uruchomić aplikację, z bluetooth i wyłącza, pojawia się następujący komunikat:

Headset event called at "current time" - 1 

Kiedy sparować urządzenie z samochodu mam dokładnie ten sam wynik:

Headset event called at "current time" - 1 

Co muszę zrobić, aby wykryć, że moje urządzenie jest aktywnie podłączony przez Bluetooth z samochód?

Z góry dziękuję i daj znać, jeśli potrzebujesz czegoś jeszcze.

EDIT WYJAŚNIENIE

wszelki wypadek moje pytanie w niezrozumiany. Chcę otrzymywać powiadomienia (tylko dziennik), gdy urządzenie przechodzi w stan połączenia z samochodem przez bluetooth. Czy coś takiego jest możliwe?

+0

Czy próbowałeś połączyć się ze zwykłym zestawem słuchawkowym Bluetooth? – bernlim

+0

Przepraszam, po prostu przeczytaj w pełni pytanie, ale zdecydowanie spróbuj po prostu zwykły zestaw słuchawkowy Bluetooth, jeśli nadal występują komplikacje. – bernlim

+0

Nie, celem gry jest połączenie z samochodami obsługującymi bluetooth. Jeśli powyższy kod jest niewłaściwy do tego celu, proszę wskazać e we właściwym kierunku :), @bernlim – Lunchbox

Odpowiedz

1

nie jestem w stanie spróbować go teraz, ale być może to działa:

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

Źródła:

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

+0

Proszę zobaczyć moją edycję. Myślę, że to działałoby, aby uzyskać podłączone urządzenia audio bluetooth. Zobacz moją edycję, wyjaśniłem szczegółowo moje pytanie. Proszę spojrzeć, zdałem sobie sprawę rano, że może to być nieco niejasne, dzięki niezależnie! – Lunchbox

+0

@ Lunchbox Myślałem, że możesz umieścić ten fragment w swojej metodzie "onServiceConnected" – jlhonora

+0

Wprowadziłem coś podobnego, kod jest tylko trochę inny. Zaktualizuję moją odpowiedź, gdy tylko będę miał czas. Wskazałeś mi właściwy kierunek, więc +1. Dzięki! – Lunchbox

0

Szybkie google uznało tę odpowiedź, to działało dla wielu osób, więc jestem pewien, że to powinno działać dla ciebie. Źródło: 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

Spróbuję go i zaktualizuję, jeśli zadziała, dzięki! – Lunchbox

+0

Wygląda na to, że wydarzenie nie uruchamia się po podłączeniu do samochodu. Napiszę rozwiązanie, gdy je znajdę. – Lunchbox

Powiązane problemy