Quando si effettua una chiamata a AudioManager.startBluetoothSCO() mentre si seleziona il livello API 18 o successivo nel manifesto, la documentazione indica che viene stabilita una connessione audio non elaborata e se l'API di destinazione 17 o inferiore è una voce virtuale la chiamata è usataAudioManager.startBluetoothSco() si arresta su Android Lollipop
Fino al livello API 20 (Android L Preview), questo ha funzionato correttamente, indirizzando qualsiasi API. Tuttavia, quando si utilizza l'ultima versione di Android Lollipop LPX13D e il livello di API 18 o successivo, si verifica un arresto anomalo con il seguente stack:
E/AndroidRuntime (31705): Causato da: java.lang.NullPointerException: tentativo di richiamare metodo virtuale 'java.lang.String android.bluetooth.BluetoothDevice.getAddress()' su un oggetto nullo di riferimento E/AndroidRuntime (31705): su android.os.Parcel.readException (Parcel.java:1546) E/AndroidRuntime (31705): su android.os.Parcel.readException (Parcel.java:1493) E/AndroidRuntime (31705): su android.media.IAudioService $ Stub $ Proxy.startBluetoothSco (IAudioService.java:1587) E/AndroidRuntime (31705): su android.media.AudioManager.startBluetoothSco (AudioManager.java:1468)
Se utilizzo il livello API 17 o inferiore su Android Lollipop, tutto funziona come previsto.
credo che l'origine del problema risiede in una modifica al codice di audio di Android che è accaduto nel livello di API 21 nel file AudioService.java linea 2392:
public void startBluetoothSco(IBinder cb, int targetSdkVersion) {
int scoAudioMode =
(targetSdkVersion < Build.VERSION_CODES.JELLY_BEAN_MR2) ?
SCO_MODE_VIRTUAL_CALL : SCO_MODE_UNDEFINED;
startBluetoothScoInt(cb, scoAudioMode);
}
Sembra SCO_MODE_UNDEFINED dovrebbero invece essere SCO_MODE_RAW. Se si guarda attraverso il file, è possibile vedere che SCO_MODE_RAW viene controllato in alcuni punti, ma non viene mai effettivamente trasferito da nessuna parte.
Qualcun altro sta vivendo questo incidente? Qualcuno sa di una soluzione migliore rispetto al downgrade dell'SDK di destinazione a 17? In caso contrario, potrebbe per favore protagonista il bug report ho presentato con Google per aumentare la probabilità che sarà esaminato :-)
Anche se non si verifica l'arresto anomalo, il dispositivo non sembra instradare l'audio dal microfono Bluetooth. –
ho lo stesso problema, il microfono non è routing, nessuna soluzione per questo? –