我和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();
答案 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
}
}