2014-09-24 151 views
1

我試圖找到這個答案,但我的搜索不斷返回不相關的結果...
所以問題是 - 我正在寫一個播放聲音效果的遊戲(沒有音樂),我設置流類型爲音樂。但是,當我將手機置於靜音模式時(無論是否振動,如果這很重要),應用程序仍會播放聲音。我可以使用音量鍵關閉應用程序中的聲音,但是我期望的(以及我未來的用戶可能會期望的)是當手機處於靜音模式時,應用程序不會發出聲音。

在這一點上,我不確定這是否應該由操作系統自動管理,或者如果我期望對此做些什麼。我可以確定檢測到靜音模式,在例如onResume中將音量設置爲0,但這可能會覆蓋用戶通過按音量按鈕設置的設置 - 因此,當他們取消靜音手機時,應用程序必須以編程方式設置音量到一個預定義的值,或理想情況下,從sharedPrefs保存一個...聽起來相當繁瑣。有更好的解決方案嗎?

這是我如何初始化&然後用聲音:在靜音模式下手動靜音Android應用程序中的聲音?

soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 100); 
soundPoolMap = new SparseIntArray(); 
soundPoolMap.put(CLICK_1, soundPool.load(activity, R.raw.click1, 1)); 
soundPoolMap.put(CLICK_2, soundPool.load(activity, R.raw.click2, 2)); 
... 
float volume = 1.0f; 
soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f); 

回答

1

我從你的問題理解是要靜音您的應用程序時,設備上silent mode

嘗試檢查RingerMode之前,您的應用程序播放聲音/音樂和播放聲音之前,只有當振鈴器RingerMode是正常的。

以下是示例代碼。

AudioManager audio = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); 
switch (audio.getRingerMode()) 
{ 
    case AudioManager.RINGER_MODE_NORMAL: 
    // Device is on Normal mode. 
    // you can play music. 
    break; 
    case AudioManager.RINGER_MODE_SILENT: 
    // Device is on Silent mode. 
    // you should not play sound now. 
    break; 
    case AudioManager.RINGER_MODE_VIBRATE: 
    // Device is on Vibrate/Meeting mode. 
    // you should not play sound but you can make vibrate device (if you want). 
    break; 
} 
+0

謝謝,這個解決方案爲我創造了奇蹟。 – 2017-09-26 12:14:32

相關問題