Notification with sound although phone is muted

2019-05-09 02:42发布

问题:

I am creating a notification with Android's NotificationManager.

Is it possible to 'override' the phone's volume (mute) settings in such a way, that the notification's sound is ALWAYS played?

The reason I need this is the following: The notification is so important, that vibration alone may not be enough. The user MUST be alerted. So a sound shall be played, even if the phone is muted or the volume is very low.

回答1:

yes it is possible,

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();

            }

        });


回答2:

You can change RINGING mode like this from silent to normal

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);

FOR YOUR CASE YOU CAN TRY SOMETHING LIKE THIS

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);