In Android, come get il profilo di un dispositivo Bluetooth collegato?

A seguito di molte risposte qui, sono in grado di build l'elenco dei dispositivi Bluetooth collegati con l'aiuto di un BroadcastReceiver . Ora la mia domanda è come faccio a sapere quale dispositivo support il profilo. Voglio essere in grado di select i dispositivi in ​​base al profilo, ad esempio, get un elenco di dispositivi attualmente connessi e il loro profilo e scegliere uno di essi. Non vedo come posso get tali informazioni se ho l'istanza di BluetoothDevice.

In questa pagina ci sono alcuni codici che illustrano come lavorare con un profilo auricolare bluetooth: http://developer.android.com/guide/topics/connectivity/bluetooth.html#Profiles . Ma non risolve il mio problema. Se pensi di mancare qualcosa, ti prego di aiutarmi e di indicarlo.

  • Registrati Google GCM utilizzando RxJava
  • Come verificare se la casella di controllo android è selezionata nel suo metodo onClick (dichiarato in XML)?
  • La camera della camera Android torna nullo
  • Come configurare Cordova-android 4.0 con il white-list
  • android: html in textview con il link cliccabile
  • android.database.CursorWindowAllocationException quando si sposta un cursore
  • Grazie mille in anticipo.

  • Android - incorporando la scena Unity3d in attività - è necessario annullare la logging del ricevitore?
  • Dove viene installato il pacchetto app per Android sul telefono
  • Lettura di tag NFC
  • Cassetto scorrevole nello stesso layout
  • L'emulatore Android support OpenGL ES 2.0?
  • NotificationCompat android - come mostrare solo la grande icona senza piccolo
  • 2 Solutions collect form web for “In Android, come get il profilo di un dispositivo Bluetooth collegato?”

    Mi sono imbattuto nello stesso problema. Non sembra che è ansible get i profili disponibili dalla class BluetoothDevice . Ma c'è un modo molto lungo ottenendo un elenco di BluetoothDevice s dal metodo getDevicesMatchingConnectionStates nella class BluetoothProfile .

    Ad esempio, se si desidera trovare che BluetoothDevice s support A2DP, creare innanzitutto un BluetoothProfile.ServiceListener personalizzato

     public class cServiceListener implements BluetoothProfile.ServiceListener { private static final int[] states={ BluetoothProfile.STATE_DISCONNECTING, BluetoothProfile.STATE_DISCONNECTED, BluetoothProfile.STATE_CONNECTED, BluetoothProfile.STATE_CONNECTING}; @Override public void onServiceConnected(int profile, BluetoothProfile bluetoothProfile) { List<BluetoothDevice> Devices=bluetoothProfile.getDevicesMatchingConnectionStates(states); for (BluetoothDevice loop:Devices){ Log.i("myTag",loop.getName()); } } @Override public void onServiceDisconnected(int profile) { } } 

    Quindi albind al profilo che si desidera controllare, in questo esempio A2DP

     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); cServiceListener mServiceListener=new cServiceListener(); mBluetoothAdapter.getProfileProxy(thisContext,mServiceListener, BluetoothProfile.A2DP); 

    Ciò logcat tutti i dispositivi bluetooth che supportno A2DP che sono negli stati richiesti. In questo esempio è incluso tutti i dispositivi attualmente connessi e dispositivi accoppiati precedentemente scollegati.

    Guardando al codice sorgente Android, è ansible indovinare quali profili sono disponibili per un dispositivo guardando i suoi UUID e quindi colbind ciascuno di essi uno per uno.

    Passo 0: copia le costanti _PROFILE_UUIDS da lì: https://android.googlesource.com/platform/packages/apps/Settings/+/9ad703cdb9a8d0972c123b041d18aa7bbeb391a4/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java

    Fase 1: get il tuo BluetoothDevice , per esempio tramite la scansione. Assicurarsi che sia legata correttamente.

    Fase 2: registrare un BroadcastReceiver per l'intento di azione di android.bluetooth.BluetoothDevice.ACTION_UUID

    Fase 3: sul dispositivo, call il metodo fetchUuidsWithSdp

    Fase 4 : riceverai una trasmissione ACTION_UUID : nel metodo onReceive è ansible onReceive logging del ricevitore e get l'elenco dei profili così:

     ArrayList<Integer> profiles = new ArrayList<>(); ParcelUuid[] uuids = device.getUuids(); if (BluetoothUuid.containsAnyUuid(uuids, HEADSET_PROFILE_UUIDS)) { profiles.add(BluetoothProfile.HEADSET); } if (BluetoothUuid.containsAnyUuid(uuids, A2DP_PROFILE_UUIDS)) { profiles.add(BluetoothProfile.A2DP); } if (BluetoothUuid.containsAnyUuid(uuids, OPP_PROFILE_UUIDS)) { //OPP doesn't have any BluetoothProfile value } if (BluetoothUuid.containsAnyUuid(uuids, HID_PROFILE_UUIDS)) { //You will need system privileges in order to use this one profiles.add(BluetoothProfile.INPUT_DEVICE); } if (BluetoothUuid.containsAnyUuid(uuids, PANU_PROFILE_UUIDS)) { profiles.add(BluetoothProfile.PAN); } 

    Fase 5: get i proxy per i profili, uno per uno:

     for (int profile : profiles) { if (!adapter.getProfileProxy(context, listener, profile)) { //Do something } } 

    Passaggio 6: fare qualsiasi cosa con each proxy recuperato nel metodo onServiceConnected del tuo ascoltatore. È ansible accedere al metodo di connect utilizzando la configuration.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.