2014-10-14 4 views
3

Я создаю уведомление с помощью NotificationManager Android.Уведомление со звуком, хотя телефон отключен

Возможно ли «переопределить» настройки громкости (без звука) телефона таким образом, чтобы звук уведомления воспроизводился ВСЕГДА?

Причина, по которой мне это нужно: Уведомление настолько важно, что одной вибрации может быть недостаточно. Пользователь ДОЛЖЕН быть предупрежден. Поэтому звук должен воспроизводиться, даже если телефон отключен или громкость очень низкая.

ответ

4

да это возможно,

MediaPlayer mMediaPlayer; 
Uri notification = null; 
notification = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_ALARM); 

mMediaPlayer = new MediaPlayer(); 
     mMediaPlayer.setDataSource(ctx, notification); 
     // mMediaPlayer = MediaPlayer.create(ctx, notification); 
     final AudioManager audioManager = (AudioManager) ctx 
       .getSystemService(Context.AUDIO_SERVICE); 

     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 

     mMediaPlayer.prepare(); 
     // mMediaPlayer.start(); 
     mMediaPlayer.setLooping(true); 
     mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
      public void onPrepared(MediaPlayer arg0) { 
       mMediaPlayer.seekTo(0); 
       mMediaPlayer.start(); 

      } 

     }); 
+0

Как этот код изменяет режим громкости/отключения звука телефона? Это делается неявно? Или я просто слепой? ;-) – Boris

+0

mMediaPlayer.setAudioStreamType (AudioManager.STREAM_ALARM); эта линия изменяет тип звука –

3

Вы можете изменить режим RINGING как это от бесшумного к нормальному

AudioManager mobilemode = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
     mobilemode.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 


     // Turn on all sound 

     // turn on sound, enable notifications 
     mobilemode.setStreamMute(AudioManager.STREAM_SYSTEM, false); 
     //notifications 
     mobilemode.setStreamMute(AudioManager.STREAM_NOTIFICATION, false); 
     //alarm 
     mobilemode.setStreamMute(AudioManager.STREAM_ALARM, false); 
     //ringer 
     mobilemode.setStreamMute(AudioManager.STREAM_RING, false); 
     //media 
     mobilemode.setStreamMute(AudioManager.STREAM_MUSIC, false); 


     // Turn off all sound 

     // turn off sound, disable notifications 
     mobilemode.setStreamMute(AudioManager.STREAM_SYSTEM, true); 
     //notifications 
     mobilemode.setStreamMute(AudioManager.STREAM_NOTIFICATION, true); 
     //alarm 
     mobilemode.setStreamMute(AudioManager.STREAM_ALARM, true); 
     //ringer 
     mobilemode.setStreamMute(AudioManager.STREAM_RING, true); 
     //media 
     mobilemode.setStreamMute(AudioManager.STREAM_MUSIC, true); 

для вашего случая вы можете попробовать что-то подобное

int previousNotificationVolume =mobilemode.getStreamVolume(AudioManager.STREAM_NOTIFICATION); 

     mobilemode.setStreamVolume(AudioManager.STREAM_NOTIFICATION,mobilemode.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0); 

     // Play notification sound 



     // Set notification sound to its previous 

     mobilemode.setStreamVolume(AudioManager.STREAM_NOTIFICATION,previousNotificationVolume, 0); 
+0

Выглядит многообещающе. Есть ли гладкий способ вернуть настройки к их начальным значениям ПОСЛЕ того, как звучит сигнал уведомления? Например. без использования фиксированного таймера или чего-то еще? – Boris

+0

Я дал вам решение общего назначения. Но ваше беспокойство касается только звука уведомления? –

+0

Я обновляю ответ, пожалуйста, проверьте его –

Смежные вопросы