1. 程式人生 > >插入耳機時播放音樂,鈴聲和鬧鐘,音樂沒有聲音的問題解決

插入耳機時播放音樂,鈴聲和鬧鐘,音樂沒有聲音的問題解決

jwisp在測試耳機使用的過程中, 發現了一個奇怪的現象.

插入耳機狀態, 播放音樂後, 至於後臺播放, 然後進入設定鈴聲的介面使鈴聲響起,

此時會在耳機和Speaker中同時播放鈴聲, 但後臺播放的音樂卻沒有了聲音,

此時音樂播放器還在播放狀態.

最初jwisp設想應該是鈴聲將音樂的播放的聲道給佔住了.

但jwisp試驗, 若不插入耳機狀態, 當音樂和鈴聲同時啟動後, 兩個聲音都能聽到.

看來不是聲道切換搶佔的問題了.

下面jwisp將自己解決這個問題的過程分享給大家.

相關類

AudioPolicyManagerBase.cpp (frameworks\base\services\audioflinger)

該類負責聲音流輸出的策略

在聲音流的策略中, android定義了有STRATEGY_MEDIA, STRATEGY_SONIFICATION等路由策略.

在上面的情況中

當播放音樂時對應的是STRATEGY_MEDIA 路由策略, 如果沒有耳機, 則輸出裝置為Speaker, 插入耳機則輸出裝置是耳機

當鈴聲響起時, 對應的路由策略是STRATEGY_PHONE,沒有耳機時, 相應的輸出裝置是Speaker, 插入耳機時, 相應的輸出裝置是耳機和Speaker.

一開始播放音樂時,路由策略為STRATEGY_MEDIA ,

鈴聲響起時,需要切換路由策略,這時就變成STRATEGY_PHONE,相應輸出裝置也需要更新

此時就會呼叫到本類中一個輸出設定函式 setOutputDevice()

在其程式碼中, 我們可用看到非常重要的一塊:

void AudioPolicyManagerBase::setOutputDevice(audio_io_handle_t output, uint32_t device, bool force, int delayMs)
{
    ......
    // mute media streams if both speaker and headset are selected
    if (output == mHardwareOutput && AudioSystem::popCount(device) == 2) {
        setStrategyMute(STRATEGY_MEDIA, true, output);
        // wait for the PCM output buffers to empty before proceeding with the rest of the command
        usleep(outputDesc->mLatency*2*1000);
    }
    ......
}

這段程式碼從 android已經說得很明白了, 如果耳機和Speaker同時播放時, 則使音訊流靜音.

而鈴聲和鬧鐘都是會使耳機和Speaker同時播放的策略.

所以這個若想解決這個問題, 想讓音樂和鈴聲鬧鐘等同時響起, 只需把上面幾行程式碼註釋掉即可.

相關推薦

插入耳機播放音樂,鈴聲鬧鐘,音樂沒有聲音的問題解決

jwisp在測試耳機使用的過程中, 發現了一個奇怪的現象. 插入耳機狀態, 播放音樂後, 至於後臺播放, 然後進入設定鈴聲的介面使鈴聲響起, 此時會在耳機和Speaker中同時播放鈴聲, 但後臺播放的音樂卻沒有了聲音, 此時音樂播放器還在播放狀態. 最初jwisp設想應該是鈴聲將音樂的播放的聲道給佔住了.

css中插入圖片的相對路徑絕對路徑

在CSS檔案裡,有時要用到background,即加一個背景圖片,新增的路徑根據圖片及css檔案的相對位置分以下兩種型別: 1.同包下:background : url(xxx.jpg); 2.不同包: 在這種情況下有2中方法可以設定,一種是使用絕對路徑,即C:\Users\dellpc

關於andorid播放內部鈴聲震動的簡單介紹

手機震動提示 關於Android裝置震動的情況有一個內部類 Vibrator private Vibrator vibrator; //定義一個內部類 將需要播放的檔案放

安卓插入耳機也要開啟揚聲器

我最開始也是在各種搜尋引擎上尋找各種方法,借鑑了https://blog.csdn.net/menghnhhuan/article/details/7415843上面的方法,並且添加了許可權<uses-permission android:name="android.p

android listview巢狀,顯示不全不能滑動的解決

在listview巢狀listview的過程中,如果我們不寫一點特殊的操作的話,可能子listview會顯示不全,並且無法滑動,那麼應該怎麼解決呢 1.子listview繼承listview,然後重寫onmeasure方法,在裡面手動的去計算高度,然後傳給super方法,這

win10 插入16k采樣的耳機無法播放錄音的問題定位

解決辦法 疑難問題 問題 采樣率 解決辦法。 聲音 了解 增強 沒有   平時做智能耳機,需要經常在windows上測試不同采樣率的聲音信號。可是,最近在16k雙聲道輸入的情況下, 無論系統都使用該耳機進行播放,該問題思索了好久,一直沒有解決辦法。   今天無意中使用了wi

建立測試觸發器:向SC表插入資料,檢查插入資料的課程號是否存在於Course表中(建立之前刪除Cno的外來鍵約束,比較外來鍵約束觸發器之間的不同)

alter table SC Drop constraint FK_SC--刪除外來鍵約束 CREATE TRIGGER trig_insert ON SC--在SC表中建立trig_insert觸發器 AFTER INSERT--insert為觸發事件,after則為觸發的時機

ODBC:如何在執行SQL插入操作返回主鍵列的自增值其它列的預設生成值

        執行SQL插入操作時,如果能將主鍵列的自增值和其它列的預設生成值一同返回,將極大的提高SQL的執行效率。我們知道,如果是編寫儲存過程的話,是可以解決這個問題的。但編寫儲存過程的問題是需要單獨編寫並在資料庫中建立,如果表比較多的話不太好維護。那是否可以不用儲存過

22_Android中的本地音樂播放網路音樂播放器的編寫,本地視訊播放網路視訊播放器,照相機案例,偷拍案例實現

1 編寫以下案例:當點選了”播放”之後,在手機上的/mnt/sdcard2/natural.mp3就會播放。2 編寫佈局檔案activity_main.xml<LinearLayout xmlns

informix 建表初始空間擴充套件空間設定不合理導致插入資料鎖表問題.

話外:在說這個問題前,我先說說昨天說的CSDN的部落格問題,總之,不是很爽,昨天同樣寫了一篇文章,不過是直接在CSDN上面寫的在提交時CSDN後臺出錯啦!!!暈.白寫半天..說起來自己也真夠笨的,希望別的朋友不要和我一樣犯這樣的底級錯誤! 話裡:    今天...不...應該

android插入耳機狀態使用揚聲器外放音樂

插入耳機的時候也可以選擇使用揚聲器播放音樂,來電鈴聲就是這麼用的。但是隻能用MediaPlayer,播放音訊檔案。 使用AudioTrack.write播放是行不通的。按理說AudioRecord、AudioTrack類相對於MediaRecorder mediaPlayer來說,更加接近底層,應該也行

ffdshow神奇的功能:視訊播放顯示運動向量QP

FFDShow可以稱得上是全能的解碼、編碼器.最初FFDShow只是mpeg視訊解碼器,不過現在他能做到的遠不止於此.它能夠解碼的視訊格式已經遠遠超出了mpeg4的範圍,包括indeo video,WMV,mpeg2等等.同時,它也提供了豐富的加工處理選項,可以銳化畫面,調

linux下音樂播放器wavmp3

if(rc<0){perror("\nsnd_pcm_hw_params_set_rate_near:");exit(1);}rc = snd_pcm_hw_params(handle, params);if(rc<0){perror("\nsnd_pcm_hw_params: ");exit(1

解決WP7手機使用藍芽耳機播放視訊無法啟動A2DP(沒有聲音)

買了個索愛的WM600 ,結果發現看視訊不能用藍芽,只能用有線耳機,很不爽,找了個方法試一下。    這個是Windows mobile上的方法, 按理說只要微軟的架構變化不是很大, 我可以使用在Windows Phone上。首先你的手機要具有完全解鎖的許可權, 使用開發

mybatis mapper xml文件配置resultmap,id行result行有什麽區別?

什麽 column invoice 配置 app nbsp ava customer entity mybatis mapper xml文件配置resultmap時,id行和result行有什麽區別? <resultMap id = "CashInvoiceMap"

關於markdown文件插入圖片遇到的小問題解決辦法

lan 分享 其他 pos 建倉 -m 好的 文件名 [] 今天用md文件時候發現需要插入圖片,以前沒做過,所以寫下來分享下。 1.先在自己的github上建一個倉庫,裏面新建個img文件夾存放圖片,怎麽建倉庫可以上網找資料,這裏就不詳細說明了。建好的倉庫如下圖所示

海思hi3716c機頂盒接usb攝像頭usb無線耳機時,無線耳機有時沒有聲音

setup 出現 sea log delayed 重載 出現異常 jar action 兩個USB設備各自是: A:USB攝像頭帶錄音功能,但不帶放音功能。 B:USB無線耳機是使用USB轉2.4G的無線耳機。 詳細現象: 1, A,B兩者同一時候插

linux-gcc 編譯頭文件庫文件搜索路徑

con 行程 efi lib local 先後 objc 路徑 oot 一、頭文件 gcc 在編譯時尋找所需要的頭文件 : ※搜尋會從-I開始 ※然後找gcc的環境變量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH

Qt5在程序打包發布遇到的問題解決方法

qml qt5 發布 近期剛剛學會用qml寫QT程序,感覺QML寫界面真的是要好很多的,尤其是在寫一些移動端的應用的時候。最近在打包發布程序的時候遇到些問題,已經完美解決,希望給遇到同樣問題的Qter一些參考。以前在打包Qwiget的程序的時候,一般是在編譯release版本後,直接點擊exe文件

編程遇到的錯誤問題

屬性設置 接受 字符 multi val ads comm 無法 屬性   Spring控制器(Controller)中要用MultipartFile接受網頁表格提交的文件時,應當現在spring配置文件中添加對MultipartFile的配置:      <bean