Android MediaPlayer 不播放

Posted

技术标签:

【中文标题】Android MediaPlayer 不播放【英文标题】:Android MediaPlayer not playing 【发布时间】: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)

有人知道怎么解决吗?

【问题讨论】:

【参考方案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 当设备“媒体音量”设置为零时出现此消息。

【讨论】:

以上是关于Android MediaPlayer 不播放的主要内容,如果未能解决你的问题,请参考以下文章

Android MediaPlayer setNextMediaPlayer 不工作

Android多媒体功能开发——使用MediaPlayer类播放音频

android MediaPlayer类可以得到播放档案位元速率不?

无法在 android 中使用 MediaPlayer 播放 MediaStore.Audio 歌曲

MediaPlayer 播放声音但不播放视频

Android MediaPlayer 播放音频