麻烦在Android上以静音模式播放声音

时间:2013-03-22 19:54:16

标签: android audio alarm ringtone silent

我正在编写一个Android应用程序来简单地播放一个警报,即使它处于静音模式也不管电话的模式。

我找到了这个question并使用了答案中的代码来覆盖当前的卷状态。我的代码如下所示:

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 = RingtoneManager.getRingtone(getApplicationContext(), alert);

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int volume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
if(volume == 0){
    volume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
}
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, volume,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

if(ringtone != null){
    ringtone.play();
}

通过调试,似乎我的问题从这一行开始:

int volume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);

因为我的手机在静音模式下似乎返回4,而在最大音量时则返回7。我不知道这是不是,应该归还什么。我只是假设如果手机处于静音模式,它将返回0。

任何可以指引我朝正确方向前进的人?

1 个答案:

答案 0 :(得分:6)

我自己回答了这个问题,花了更多时间深入阅读文档。

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 = RingtoneManager.getRingtone(getApplicationContext(), alert);

设置铃声后,我必须设置铃声的流类型:

    ringtone.setStreamType(AudioManager.STREAM_ALARM);