2012-12-03 83 views
2

中靜音,也可以響鈴,即使鈴聲靜音也可以響鈴嗎?如果是的話,如何。另外,我可以將其音量設置爲介於兩者之間的某個值,而不僅僅是maxvolume?在此先感謝即使鈴聲在android

for (SmsMessage msg : messages) { 
     if (msg.getMessageBody().contains("firealert")) { 

      Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
      if(alert == null){ 
       // alert is null, using backup 
       alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
       if(alert == null){ 
        // alert backup is null, using 2nd backup 
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);    
       } 
      } 
      Ringtone r = RingtoneManager.getRingtone(context.getApplicationContext(), alert); 
      AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
      int maxVolumeAlarm = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM); 
      int maxVolumeRing = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING); 
      audioManager.setStreamVolume(AudioManager.STREAM_ALARM, maxVolumeAlarm,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
      audioManager.setStreamVolume(AudioManager.STREAM_RING, maxVolumeRing,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
      r.play(); 
       Toast.makeText(context.getApplicationContext(), "alarm started", Toast.LENGTH_LONG).show(); 


     }//end if 
    }//end for 
+2

「即使鈴聲靜音,是否可以響鈴?」如果用戶選擇在手機上關閉音量,則不應該試圖超越他們的意願。相反,在您的應用中創建一個界面,允許用戶在_they決定打開此特定功能時將除您以外的所有其他通知靜音。 (我每晚使用類似的方法。) – Sam

+0

哈哈,我只是認爲這是可能的 –

+0

即使鈴聲模式設置爲靜音/振動,某些供應商也不會使鬧鐘靜音。由供應商決定,所以我懷疑你會在所有Android設備上獲得相同的行爲。 – Michael

回答

4

事情來看待:

AudioManager.getRingerMode/setRingerMode。將其設置爲RINGER_MODE_NORMAL以確保手機未被靜音或設置爲振動。 (雖然你可能想先檢查狀態,這樣你就可以保存它,你的報警被清除後,重新設置值。)

if (aManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) 
    aManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 

如果你想音量設置爲50%,那麼檢查AudioManager.getStreamMaxVolume然後例如,除以2。不過,讓用戶配置它可能會更好。使用SeekBar讓他設置一個首選音量(這也可以在鬧鈴播放後重新恢復正常)。

RingerVolumeBar = (SeekBar) findViewById(R.id.seekBar1); 
RingerVolumeBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
{ 
    @Override 
    public void onProgressChanged(SeekBar seekBar, 
         int progress, boolean fromUser) 
    { 
    aManager.setStreamVolume(AudioManager.STREAM_RING, 
          progress, AudioManager.FLAG_PLAY_SOUND); 
    // record new setting so you can load it up or reset it back later 
    ... 
    } 
}); 
+0

謝謝,我用setRingerMode()它解決了這個問題。再次感謝。 –

+0

有沒有辦法在系統音量seekbar上監聽事件,以便我可以繼續使用setVolumeControlStream(),當用戶想要設置音量時將鈴聲設置爲開啓? – BeccaP

+0

我這麼認爲。看看 我相信你可以製作一個廣播接收器。 – JamieB