Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将声音作为媒体/闹钟/铃声播放?_Java_Android_Ringtone_Ringtonemanager - Fatal编程技术网

Java 是否将声音作为媒体/闹钟/铃声播放?

Java 是否将声音作为媒体/闹钟/铃声播放?,java,android,ringtone,ringtonemanager,Java,Android,Ringtone,Ringtonemanager,我的应用程序播放警报。在Android声音设置中,此声音由“铃声音量”滑块控制,而不是“报警音量”滑块。如何更改由“报警音量”控制的声音 我尝试使用setAudioAttributes,但结果是“媒体音量”滑块控制音量: public void doAlarm(){ Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); MediaPlayer mp = MediaPlayer.

我的应用程序播放警报。在Android声音设置中,此声音由“铃声音量”滑块控制,而不是“报警音量”滑块。如何更改由“报警音量”控制的声音

我尝试使用setAudioAttributes,但结果是“媒体音量”滑块控制音量:

public void doAlarm(){

    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    MediaPlayer mp = MediaPlayer.create(getApplicationContext(), notification);
    mp.setAudioAttributes(new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).build());
    mp.setLooping(true);
    mp.start();
    }

我缺少什么?

我找到了一个解决方案:不使用
.create()
方法。而是使用
.setDataSource()
.prepare()
。代码如下:

public void ringAlarm() {

    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    if (alarmUri == null) {
        alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    }

    if (alarmUri == null) {
        Log.e("ringAlarm" , "alarmUri null. Unable to get default sound URI");
        return;
    }

    MediaPlayer mp = new MediaPlayer();
    // This is what sets the media type as alarm
    // Thus, the sound will be influenced by alarm volume
    mp.setAudioAttributes(new AudioAttributes.Builder()
                             .setUsage(AudioAttributes.USAGE_ALARM).build());

    try {
        mp.setDataSource(getApplicationContext(), alarmUri);
        mp.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // To continuously loop the alarm sound
    mp.setLooping(true);
    mp.start();
}

我找到了一个解决方案:不使用
.create()
方法。而是使用
.setDataSource()
.prepare()
。代码如下:

public void ringAlarm() {

    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    if (alarmUri == null) {
        alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    }

    if (alarmUri == null) {
        Log.e("ringAlarm" , "alarmUri null. Unable to get default sound URI");
        return;
    }

    MediaPlayer mp = new MediaPlayer();
    // This is what sets the media type as alarm
    // Thus, the sound will be influenced by alarm volume
    mp.setAudioAttributes(new AudioAttributes.Builder()
                             .setUsage(AudioAttributes.USAGE_ALARM).build());

    try {
        mp.setDataSource(getApplicationContext(), alarmUri);
        mp.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // To continuously loop the alarm sound
    mp.setLooping(true);
    mp.start();
}