在清單中針對API級別18或更高級別調用AudioManager.startBluetoothSCO()時,文檔指出建立了原始音頻連接,並且如果針對API 17或更低級別的虛擬語音呼叫被使用。AudioManager.startBluetoothSco()在Android Lollipop上崩潰
直到API級別20(Android L預覽版)爲止,這個工作正常,目標是任何API。但是,如果使用最新的Android Lollipop版本LPX13D並且API等級爲18或更高,我會遇到以下堆棧跟蹤崩潰:
E/AndroidRuntime(31705):引起:java.lang.NullPointerException:嘗試調用虛擬方法java.lang.String android.bluetooth.BluetoothDevice.getAddress()'null對象引用 E/AndroidRuntime(31705):at android.os.Parcel.readException(Parcel.java:1546) E/AndroidRuntime (31705):at android.os.Parcel.readException(Parcel.java:1493) E/AndroidRuntime(31705):at android.media.IAudioService $存根$ Proxy.startBluetoothSco(IAudioService.java:1587) E/AndroidRuntime (31705):at android.media.AudioManager.startBluetoothSco(AudioManager.java:1468)
如果我在Android Lollipop上定位API級別17或更低版本,則按預期工作。
我認爲,問題的根源在於,改變Android的音頻代碼,API等級21發生在文件AudioService.java行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);
}
看起來SCO_MODE_UNDEFINED應改爲SCO_MODE_RAW。如果你仔細查看文件,你會發現SCO_MODE_RAW在幾個地方被檢查過,但實際上從來沒有在任何地方傳過。
是否有其他人遇到這種崩潰?有誰知道比將目標SDK降級到17更好的解決方案嗎?如果沒有,你能不能請明星bug report我與谷歌申請增加的機會,這將在:-)
即使我沒有得到崩潰,設備似乎也沒有從藍牙麥克風路由音頻。 – 2015-02-25 23:39:16
我有同樣的問題,麥克風不是路由,任何解決方案? – 2015-04-18 06:40:25