2015-06-21 10 views
5

Ich versuche zu überprüfen, wenn mein Gerät mit einem Auto verbunden ist. Ich gehe davon aus dem Auto wirkt wie ein Bluetooth-Headset, deshalb habe ich den folgenden Code in meiner Tätigkeit onCreate verwendet:Bluetooth-Verbindung mit dem Auto

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

Wenn ich die Anwendung zu starten, mit Bluetooth ein und aus, bekomme ich folgende Ausgabe:

Headset event called at "current time" - 1 

Wenn ich mein Gerät mit dem Auto Pairing bekomme ich genau die gleiche Leistung:

Headset event called at "current time" - 1 

Was muß ich tun, um zu erkennen, dass das Gerät aktiv über bluetooth verbunden ist mit das Auto?

Vielen Dank im Voraus, und lassen Sie mw wissen, wenn Sie etwas anderes benötigen.

EDIT KLARSTELLUNG

Nur für den Fall meiner Frage in falsch verstanden. Ich möchte benachrichtigt werden (nur ein Protokoll), wenn das Gerät über Bluetooth mit Bluetooth verbunden wird. Ist so etwas möglich?

+0

Haben Sie versucht, nur mit einem normalen Bluetooth-Headset verbinden? – bernlim

+0

Entschuldigung, lesen Sie einfach Ihre Frage vollständig, aber versuchen Sie definitiv mit nur einem normalen Bluetooth-Headset zuerst, wenn es weiterhin Komplikationen gibt. – bernlim

+0

Nein, das Ziel des Spiels ist es, mit einem Bluetooth-fähigen Auto zu verbinden. Wenn der obige Code für diesen Zweck falsch ist, zeigen Sie bitte e in die richtige Richtung :), @bernlim – Lunchbox

Antwort

1

ich nicht in der Lage bin, es zu versuchen jetzt, aber vielleicht könnte diese Arbeit:

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

Quellen:

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

+0

Bitte sehen Sie meine Bearbeitung. Ich denke, das würde funktionieren, um die verbundenen Bluetooth-Audiogeräte zu bekommen. Bitte sehen Sie meine Bearbeitung, ich habe meine Frage näher erläutert. Bitte schauen Sie, ich habe heute morgen gemerkt, dass es vielleicht etwas unklar ist, danke trotzdem! – Lunchbox

+0

@Lunchbox Ich dachte, dass Sie das Snippet in Ihre 'onServiceConnected' Methode einfügen könnten – jlhonora

+0

Ich habe etwas ähnliches implementiert, der Code ist nur geringfügig anders. Ich werde mit meiner Antwort aktualisieren, sobald ich Zeit habe. Du hast mich in die richtige Richtung gezeigt, also +1. Vielen Dank! – Lunchbox

0

Eine schnelle Google diese Antwort gefunden, es funktionierte für ziemlich viele Leute, also bin ich mir ziemlich sicher, dass es für dich funktionieren sollte. Quelle: 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

Ich werde es versuchen und aktualisieren, wenn es funktioniert hat, danke! – Lunchbox

+0

Sieht so aus, als ob das Ereignis nicht ausgelöst wird, wenn es mit einem Auto verbunden ist. Ich werde die Lösung veröffentlichen, wenn ich sie finde. – Lunchbox