即使在安卓手机中静音时,也会发出警报

时间:2012-12-03 22:06:35

标签: android alarm

先生,即使振铃被静音,是否可以发出警报?如果是的话,如何。而且,我可以将其音量设置为介于两者之间而不仅仅是maxvolume吗?提前谢谢

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

1 个答案:

答案 0 :(得分: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
   ...
   }
});