簡體   English   中英

Android AudioManager.setMode(MODE_NORMAL)失敗

[英]Android AudioManager.setMode(MODE_NORMAL) fails

我正在開發2個需要協同工作的VoIP應用程序; 一個是軟電話應用程序(App A),它使用各種音頻模式,如RINGTONE,IN_COMMUNICATION等。另一個應用程序(App B)需要音頻模式NORMAL。 我嘗試確保彼此玩得很好,所以當軟電話App A完成一個電話時,它會將音頻模式恢復為NORMAL。 同樣,如果App B需要在App A正在做的事情中間運行,它會保存它找到的音頻模式並在完成后恢復。

例如,對於入站呼叫,App A可能會更改音頻模式,如下所示:

  1. 當呼叫進來時,MODE_RINGTONE
  2. 連接呼叫時MODE_IN_COMMUNICATION
  3. 呼叫終止后MODE_NORMAL

如果App B在連接呼叫時需要做某事(上面的步驟2),它會

  1. 保存MODE_IN_COMMUNICATION
  2. 設置MODE_NORMAL
  3. 做它需要做的事情
  4. 恢復MODE_IN_COMMUNICAITON

兩個應用程序都使用其應用程序上下文獲取Android AudioManager。

我遇到的問題是,一旦App B完成上述步驟,App A就會在呼叫終止后嘗試將音頻模式恢復為NORMAL。

myAudioManagerReference.setMode(AudioManager.MODE_NORMAL);
if (myAudioManagerReference.getMode() != AudioManager.MODE_NORMAL)
  Log.w(CLASSTAG, "failure to set audio mode to MODE_NORMAL);

我的App B是否可以對AudioManager模式進行某種鎖定? 或者更改了App A的權限,使其無法將模式更改回NORMAL? 我發現一旦我退出App B,App A就可以成功地將模式更改為NORMAL。

這看起來很可能是一個固件問題。 我在這台設備(工業移動設備)上看到來自ALSA驅動程序的可疑日志,看起來驅動程序有時會使用錯誤的PID來改變音頻模式。 我也無法在任何其他設備上重新創建相同的問題,包括來自同一制造商的一些設備。

不幸的是,我還沒有得到制造商(以及ALSA驅動程序編寫者)的確認,就是這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM