如何播放从RingtonePreference中选择的铃声

9

我将尝试播放从RingtonePreference中选择的铃声。我该如何播放它?

这是我的xml文件代码:

<RingtonePreference
    android:title="Choose Alarm"
    android:key="ringtone"
    android:summary="this is summary"
    ></RingtonePreference>

这是我在Java中正在做的事情

SharedPreferences getAlarms = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String alarms = getAlarms.getString("ringtone", "default ringtone");

当我像这样使用toast时:
Toast.makeText(getApplicationContext(), alarms, Toast.LENGTH_LONG).show();

然后它显示这样的路径。
content://media/internal/audio/media/50

但我不知道怎么玩这个游戏。请帮忙。
3个回答

21
private void alarm(){
    SharedPreferences getAlarms = PreferenceManager.
                                  getDefaultSharedPreferences(getBaseContext());
    String alarms = getAlarms.getString("ringtone", "default ringtone");
    Uri uri = Uri.parse(alarms);
    playSound(this, uri);

    //call mMediaPlayer.stop(); when you want the sound to stop
}


private MediaPlayer mMediaPlayer;
private void playSound(Context context, Uri alert) {
        mMediaPlayer = new MediaPlayer();
        try {
            mMediaPlayer.setDataSource(context, alert);
            final AudioManager audioManager = (AudioManager) context
                    .getSystemService(Context.AUDIO_SERVICE);
            if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            }
        } catch (IOException e) {
            System.out.println("OOPS");
        }
    }

这里应该是你想要的 :) 希望它可以正常工作


感谢SmartLemon。我正在BroadcastReceiver中调用playSound方法。当我将鼠标悬停在它上面时,它会给我这个错误:“类型Test中的方法playSound(Context, Uri)对于参数(new BroadcastReceiver(){},Uri)不适用。” - Om3ga
用<ActivityName>.this替换此处。 - FabianCook
1
广播接收器以上下文和意图作为参数,您需要使用调用广播接收器的上下文调用playSound()。 - Luke
获取父类的基本上下文,我认为应该可以。我不明白为什么它不能工作。 - FabianCook
我使用以下代码构建通知:Notification notification = new Notification.Builder(context).setContentTitle(title + ":" + note).setContentText(title).setSmallIcon(R.drawable.ic_launcher).setContentIntent(contentIntent).setSound(uri).getNotification(); - pjw
@FabianCook。我在Service类中创建了MediaPlayer,因为我想使用mediaPlayer.setDataSource(getApplicationContext(),uri);,但它显示了这个异常:未处理的Exceptiom:java.io.IOException。我该如何解决? - Mina Dahesh

1

这里是Commonsware的一个示例项目,您可以下载并检查其工作情况。

您可以通过使用以下方法从获取的字符串中获取Uri:

SharedPreferences getAlarms = PreferenceManager.
                                  getDefaultSharedPreferences(getBaseContext());
String alarms = getAlarms.getString("ringtone", "default ringtone");
Uri uri = Uri.parse("alarms");

然后您可以使用MediaPlayer播放URI。


1
我已经检查了那个项目,但那不是我想要的。我想知道的是如何播放所选的声音。 - Om3ga
以上是如何完成所有操作的示例,大家可以参考一下 :) - FabianCook

0

您可以从偏好设置中选择首选铃声,然后使用RingtoneManager类轻松播放铃声。

SharedPreferences getAlarms = PreferenceManager.
                              getDefaultSharedPreferences(getBaseContext());
String alarms = getAlarms.getString("ringtone", "default ringtone");
Uri uri = Uri.parse(alarms);

Ringtone r = RingtoneManager.getRingtone(context, uri);
r.play();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接