【问题标题】:Android MediaPlayer not playingAndroid MediaPlayer 不播放
【发布时间】:2017-05-19 19:57:12
【问题描述】:

以下问题:我只想在 Android 中使用媒体播放器播放一个小的 .wav 文件。 .wav 文件位于 raw 目录中。我想从 MainActivity 开始声音。这就是我播放声音的方式:

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound1);
mp.start();

只要我打电话给mp.start(),我的 LogCat 就会出现以下错误:

01-05 11:07:17.729 19960-19960/com.example.simplesound E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
01-05 11:07:17.729 19960-19960/com.example.simplesound E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
01-05 11:07:17.862 19960-19960/com.example.simplesound D/MediaPlayer: setSubtitleAnchor in MediaPlayer
01-05 11:07:17.925 19960-21184/com.example.simplesound E/MediaPlayer: error (1, -2147483648)
01-05 11:07:17.926 19960-19960/com.example.simplesound E/MediaPlayer: Error (1,-2147483648)

有人知道怎么解决吗?

【问题讨论】:

    标签: java android audio android-mediaplayer


    【解决方案1】:
    MediaPlayer player = MediaPlayer.create(this,  R.raw.zindgivalaaop);
    player.setVolume(50,50);
    player.start();
    
    @Override
    public void onDestroy() {
         super.onDestroy();
         player.stop();
         player.release();
    }
    

    尝试传递类上下文而不是 getApplicationContext()

    【讨论】:

    • 尝试播放其他文件。
    • 好的哇。尝试从互联网下载另一个声音文件,瞧,它可以工作了!谢谢!不知道我的文件有什么问题。你知道有什么办法可以解决吗?
    • 我不确定..但是如果可以的话试试.mp3文件
    • 如果我通过 getApplicationContext,我的应用程序将崩溃
    • 请传递类的上下文而不是应用程序上下文。
    【解决方案2】:

    使用下面的代码回答here。它会像魅力一样发挥作用。

    package com.example.hellomoon;
    
    import android.content.Context;
    import android.media.MediaPlayer;
    
    public class AudioPlayer {
    
    private MediaPlayer mMediaPlayer;
    
    public void stop() {
        if (mMediaPlayer != null) {
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    }
    
    public void play(Context c, int rid) {
        stop();
    
        mMediaPlayer = MediaPlayer.create(c, rid);
        mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                stop();
            }
        });
    
        mMediaPlayer.start();
    }
    
    }
    

    【讨论】:

    • 我不知道为什么,但即使这样对我也不起作用 :( 可能是我的 API 级别造成的?我在 Android 7.1 (API 25) 上运行它
    • 那说明你的声音文件有问题。尝试使用另一个原始文件。
    • 好的哇。尝试从互联网下载另一个声音文件,瞧,它可以工作了!谢谢!不知道我的文件有什么问题。你知道有什么办法可以解决吗?
    • 真的不知道,谢谢你没有选择最佳答案,虽然我先回答了:D
    • 这是错误的。完成后release() 将被调用,当第二次play() 时Stop()-->release() 将被再次调用,这会导致错误。 (见android媒体播放器的状态机图)
    【解决方案3】:

    试试这个:Playing short .wav files - Android

    SoundPool 是播放短 .wav(2-3 秒)文件的最佳方式

    欲了解更多信息:https://developer.android.com/reference/android/media/SoundPool.html

    【讨论】:

    • 是的,我会试试这个。我认为MediaPlayer 更简单,但由于它不起作用,我将不得不使用SoundPool
    【解决方案4】:

    我认为您的 MediaPlayer 正在运行。检查设置中的设备“媒体音量”。 JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 当设备“媒体音量”设置为零时出现此消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多