Java 如何在Android中设置闹钟铃声

Java 如何在Android中设置闹钟铃声,java,android,eclipse,android-intent,Java,Android,Eclipse,Android Intent,我正在做一个报警应用程序,我被困在报警音阶段。我目前正在尝试使用RingtoneManager设置闹钟铃声,但它根本不起作用。此外,我有一个seekbar可以播放用户选择的报警音,但它没有。当我设置报警音调时,我不希望它是默认的,只希望它是该报警的音调,因为用户可以选择创建多个报警 这是seekbar代码: volumeBar = (SeekBar) findViewById(R.id.seekBarVolume); audioManager = (AudioManager) g

我正在做一个报警应用程序,我被困在报警音阶段。我目前正在尝试使用RingtoneManager设置闹钟铃声,但它根本不起作用。此外,我有一个seekbar可以播放用户选择的报警音,但它没有。当我设置报警音调时,我不希望它是默认的,只希望它是该报警的音调,因为用户可以选择创建多个报警

这是seekbar代码:

volumeBar = (SeekBar) findViewById(R.id.seekBarVolume);
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        mMediaPlayer = new MediaPlayer();

        volumeBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM));
        volumeBar.setKeyProgressIncrement(1);
        volumeBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_ALARM));

        volumeBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
                try {
                    Uri alert = RingtoneManager
                            .getDefaultUri(RingtoneManager.TYPE_ALARM);

                    mMediaPlayer.setDataSource(getApplicationContext(), alert);
                    if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0 && !mMediaPlayer.isPlaying()) {
                        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                        mMediaPlayer.setLooping(true);
                        mMediaPlayer.prepare();
                        mMediaPlayer.start();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // TODO Auto-generated method stub
                audioManager.setStreamVolume(AudioManager.STREAM_ALARM, progress, AudioManager.FLAG_SHOW_UI);
            }
        });
这是铃声选择器的目的:

case R.id.buttonAlarmTones:
                try {
                    mMediaPlayer.release();
                    mMediaPlayer.stop();
                } catch (Exception e) {
                    // TODO: handle exception
                }
                Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_ALARM));
                startActivityForResult(intent, 5);
                break;
最后,这里是onActivityResult():


任何帮助都将不胜感激。谢谢。

这里是一个使用RingtoneManager的示例

    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    Ringtone ringtone = RingtoneManager.getRingtone(context, uri);
    ringtone.play();

您不需要MediaPlayer。

使用seekbar后,如何循环
铃声.play()
?我可能需要使用medidaplayer。我看不到侦听器,但您可以轮询Ringtone.isPlaying()。不是说这很好,但这是一个选择。更不用说我发现了为什么它没有循环。一些“铃声”是通知音。无论如何,谢谢你帮我解决了我的问题<代码>铃声只是铃声而不是警报声。因此,如果铃声音量已静音,
ringtone.play()
即使未静音报警声音也不会响起<代码>铃声。play()无论报警声是否静音,都会继续发出声音。所以这只是误用了
铃声
贴在那里的代码对我来说非常合适
    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    Ringtone ringtone = RingtoneManager.getRingtone(context, uri);
    ringtone.play();