无法使用MediaPlayer对象播放一些mp3文件

时间:2017-08-17 18:48:21

标签: android

我和api guides -

一样

我只有一些文件和文件路径 - 我想播放它。

例外情况是:/ storage_emulated/0/111.mp3(Permission denied)

我已经添加了所有权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

代码:

public class PlayingModule {

    private MediaPlayer _mediaPlayer;
    private Activity _content;

    public PlayingModule(Activity content) {

 //        this._mediaPlayer = new MediaPlayer();
        this._content = content;
}

    public void PlayMediaFile(URI mediaFilePath) throws IOException {


    Uri auri = Uri.parse(mediaFilePath.toString());

    _mediaPlayer = MediaPlayer.create( _content , auri);

    _mediaPlayer.stop();
    _mediaPlayer.reset();
    _mediaPlayer.release();

    _mediaPlayer = MediaPlayer.create( _content , auri);

    _mediaPlayer.start();
}

}

调用此类并播放方法:

  public void play() throws IOException {
    File path = Environment.getExternalStorageDirectory();
    File file = new File(path + "/111.mp3");

    PlayingModule pm = new PlayingModule(this);
    pm.PlayMediaFile(file.toURI());

无法理解为什么它不起作用

我也将代码更改为此代码 - ...但仍无法正常工作..

    Uri uri = Uri.parse(mediaFilePath.toString());

    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(_content.getApplicationContext(), uri);
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
    mediaPlayer.prepareAsync();

1 个答案:

答案 0 :(得分:1)

您可以检查MediaPlayer是否已准备好。

您需要设置OnPreparedListener。一旦准备好MediaPlayer,您将在OnPrepared()中调用,您必须在其中调用mediaplayer.start()

如果在任何无效状态()中调用start()api,它将给出异常。

为了检查是否发生了任何错误,您还可以注册onErrorListener。

添加运行时权限 -

public void checkPermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (!(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) {
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (!(grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
        Log.d(TAG, "Storage Permission not granted");   
    } else {
        // Permission granted - resume
    }
}