android mediaplayer - 播放一次铃声

标签 android android-mediaplayer ringtone

我尝试使用 MediaPlayer 类播放一次设备铃声(我必须使用 MediaPlayer,因为我在应用程序中将铃声与其他音频源一起使用)所以我尝试以下方法来播放随机铃声,但我无法停止它循环播放,一直播放。是否可以使用 MediaPlayer 只播放一次铃声?

谢谢

try {
    RingtoneManager mRing = new RingtoneManager(RingtoneActivity.this);
    int mNumberOfRingtones = mRing.getCursor().getCount();
    Uri mRingToneUri = mRing.getRingtoneUri((int) (Math.random() * mNumberOfRingtones));
    mMediaPlayer = new MediaPlayer();
    mMediaPlayer.setDataSource(RingtoneActivity.this, mRingToneUri);
    mMediaPlayer.prepare();
    mMediaPlayer.setLooping(false);
    mMediaPlayer.start();

} catch (Exception ignore) {
}

更新:

我刚刚发布了一个新的 question与此相关,因为我能够在我的案例中找到问题的具体原因。

最佳答案

我找到了使用事件的简单解决方案 - 确认答案,因为它解决了您的问题:)

mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
                    @Override
                    public void onSeekComplete(MediaPlayer mediaPlayer) {
                        mediaPlayer.stop();
                    }
                });

http://developer.android.com/reference/android/media/MediaPlayer.html

记住release()。

            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mediaPlayer) {
                    mediaPlayer.release();
                }
            });

您想要使用的完整代码需要将铃声设置为您想要的内容。

        AudioManager audioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
        int volume = audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION);
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(view.getContext());
        Uri notificationSoundUri = Uri.parse(prefs.getString("notification_sound", "DEFAULT_SOUND"));

        MediaPlayer mediaPlayer = new MediaPlayer();
        try {
            mediaPlayer.setDataSource(view.getContext(), notificationSoundUri);
        } catch (Exception e1) {
            e1.printStackTrace();
            mediaPlayer.release();
            return;
        }
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mediaPlayer.release();
            }
        });
        try {
            mediaPlayer.prepare();
        } catch (Exception e1) {
            e1.printStackTrace();
            mediaPlayer.release();
            return;
        }
        mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {

            @Override
            public void onSeekComplete(MediaPlayer mediaPlayer) {
                // TODO Auto-generated method stub
                mediaPlayer.stop();
                mediaPlayer.start();
            }
        });
        mediaPlayer.setVolume(volume, volume);
        mediaPlayer.start();

关于android mediaplayer - 播放一次铃声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12832634/

相关文章:

java - AndEngine - 滚动 map 时的 Artifact (TextureOptions 相关)

c# - 如何阻止MediaPlayer每次启动?

android - 以编程方式创建目录?

android - 如何从 android 上的音量首选项更改音量?

android - Android-播放音频时更改播放按钮的文本

android - Geoquery 填充 ListView/RecyclerView

android - 更新搜索栏值

android - 我可以从 android studio 在 Windows 11 中安装 Android 应用程序吗?

android - 在设备的媒体音量关闭时播放警报声

java - 如何在屏幕锁定或 sleep 时暂停和播放媒体播放器?