2012-10-22 25 views
11

Ho due dispositivi bluetooth accoppiati (l'unità principale della mia auto per l'audio del telefono e un ricevitore bluetooth separato per A2DP). Sul mio telefono c'è una casella di controllo per "Usa per l'audio multimediale" che devo attivare manualmente per la mia uscita A2DP per andare agli altoparlanti della mia auto. Il mio obiettivo è quello di passare a livello di programmazione.Attivazione dispositivo A2DP (Android)

Ho provato ad utilizzare sia la classe AudioManager con il deprecato setBluetoothA2dpOn che il setBluetoothScoOn, ma nessuno dei due sembrava avere alcun effetto. Sono stato in grado di ottenere un elenco dei dispositivi associati Bluetooth e ottenere un handle per la connessione che voglio attivare, ma non riesco a farlo abbastanza bene. Ho anche provato ad ottenere l'adattatore bluetooth predefinito e quindi usare getProfileProxy ma mi sento come se stessi latrando l'albero sbagliato lì.

Qualcuno può indicarmi la giusta direzione? Fondamentalmente tutto quello che voglio fare è l'equivalente di controllare la casella "Usa per l'audio multimediale".

+1

quale telefono è questo, è l'impostazione presente sulla linea di dispositivi nexus? – nandeesh

+0

Il telefono che sto usando è il Galaxy S3 con AT & T. Non posso essere sicuro che sarebbe presente lì, ma immagino che lo farebbe. – JamesB41

risposta

0

Prima di tutto bisogna impostare il programma per attivare il Bluetooth sul telefono cellulare e selezionare il dispositivo che dovrebbe abbinare con via

bluetoothAdapter.disable()/enable() 

(Im non sicuro circa l'abbinamento, ma questo deve essere fatto attraverso qualche config attività)

Poi si dovrebbe impostare A2DP per la connessione a stereo della vettura

segui questo link per cercare di trovare il codice per esso, se ho tempo cercherò di trovarlo per voi, ma è un inizio = ]

hidden & internal api's

3

Poco tempo fa ho avuto un problema simile cercando di connettere un dispositivo bluetooth al telefono Android. Anche se il tuo profilo del dispositivo è diverso, penso che la soluzione sia la stessa.

prima cosa è necessario creare un pacchetto nel progetto denominato android.bluetooth e mettere il seguente IBluetoothA2dp.aidl in là:

package android.bluetooth; 

import android.bluetooth.BluetoothDevice; 

/** 
* System private API for Bluetooth A2DP service 
* 
* {@hide} 
*/ 
interface IBluetoothA2dp { 
    boolean connectSink(in BluetoothDevice device); 
    boolean disconnectSink(in BluetoothDevice device); 
    boolean suspendSink(in BluetoothDevice device); 
    boolean resumeSink(in BluetoothDevice device); 
    BluetoothDevice[] getConnectedSinks(); 
    BluetoothDevice[] getNonDisconnectedSinks(); 
    int getSinkState(in BluetoothDevice device); 
    boolean setSinkPriority(in BluetoothDevice device, int priority); 
    int getSinkPriority(in BluetoothDevice device); 

    boolean connectSinkInternal(in BluetoothDevice device); 
    boolean disconnectSinkInternal(in BluetoothDevice device); 
} 

Poi, per accedere a tali funzionalità, inserire il seguente classe del progetto:

public class BluetoothA2dpConnection { 

private IBluetoothA2dp mService = null; 

public BluetoothA2dpConnection() { 

    try { 
     Class<?> classServiceManager = Class.forName("android.os.ServiceManager"); 
     Method methodGetService = classServiceManager.getMethod("getService", String.class); 
     IBinder binder = (IBinder) methodGetService.invoke(null, "bluetooth_a2dp"); 
     mService = IBluetoothA2dp.Stub.asInterface(binder); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
} 

public boolean connect(BluetoothDevice device) { 
    if (mService == null || device == null) { 
     return false; 
    } 
    try { 
     mService.connectSink(device); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

public boolean disconnect(BluetoothDevice device) { 
    if (mService == null || device == null) { 
     return false; 
    } 
    try { 
     mService.disconnectSink(device); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

}

Infine, per collegare il dispositivo A2DP, sceglierne uno Blu etoothDevice da un elenco di dispositivi associati e inviarlo come parametro del metodo connect. Assicurati di scegliere un dispositivo con il profilo corretto, altrimenti avrai un'eccezione.

Ho provato questa soluzione in un telefono con Android versione 2.3 e ha funzionato bene.

Scusate qualsiasi errore inglese. Spero che ciò possa aiutarti.

+0

Non vedo dove "Stub" è implementato nel tipo IBluetoothA2dp, si prega di chiarire? – digiphd

Problemi correlati