2

先生、着信音がミュートされていてもアラームを鳴らすことはできますか? はいの場合、どのように。また、音量を最大音量だけでなく、その間の何かに設定することはできますか? 前もって感謝します

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
4

1 に答える 1

5

注目すべきこと:

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
   ...
   }
});
于 2012-12-04T14:34:02.363 に答える