2017-08-17 114 views
0

我做的一样api guides -无法使用MediaPlayer对象来播放一些MP3文件

我只是有一些文件和文件路径 - 我要玩它。

唯一的例外是:/storage/emulated/0/111.mp3(拒绝)

我已经添加的所有权限

<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(); 
+0

你持有'READ_EXTERNAL_STORAGE'和/或'WRITE_EXTERNAL_STORAGE'权限,包括运行时的权限?此外,使用'新的文件(路径。“/111.mp3”);',而不是'新的文件(路径+“/111.mp3”);'。另外,为什么你要创建两个'MediaPlayer'实例?最后,“不工作”是什么意思? – CommonsWare

+0

添加权限..不起作用。 – Yanshof

回答

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 
    } 
} 
+0

add also .. and not work – Yanshof

+0

@Yanshof检查MediaPlayer的adb日志,看看是否有类似* mediaplayer错误的日志(1,-17)*注意:错误代码可能不同 – Swati

+0

我不明白。 – Yanshof