播放由MediaPlayer用戶指定的mp3文件時遇到了某些問題。setDataSource()IO異常
try {
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(getApplicationContext(), audio);
mPlayer.prepare();
mPlayer.start(); }
catch (IOException e) {
numberText.setText("IO EXCEPTION");
e.printStackTrace();
}
問題是在mPlayer.setDataSource(getApplicationContext(),音頻)
在這裏,我從用戶獲得指定的MP3
setAudio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("audio/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,1);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
audioPath = intent.getData().getPath();
audio = Uri.parse(audioPath);
}
}
}
});
錯誤日誌顯示該
setDataSource: SecurityException! uri=content://com.android.providers.downloads.documents/document/1545
java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{7b8354b 23595:com.example.m1tr0s0ul4s.thatawkwardcall/u0a137} (pid=23595, uid=10137) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
at android.os.Parcel.readException(Parcel.java:1540)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3372)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:4819)
at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2527)
at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1486)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1092)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:932)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:859)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:987)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:961)
at com.example.m1tr0s0ul4s.thatawkwardcall.AcceptCall.onCreate(AcceptCall.java:55)
at android.app.Activity.performCreate(Activity.java:5966)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2408)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2517)
at android.app.ActivityThread.access$800(ActivityThread.java:162)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:189)
at android.app.ActivityThread.main(ActivityThread.java:5529)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
10-20 17:31:13.041 23595-23595/com.example.m1tr0s0ul4s.thatawkwardcall
E/MediaPlayer: Unable to create media player
我幾乎不知道是怎麼回事:/請幫助
您是否在我的答案中嘗試了第一段代碼?如果您的權限正確放置,那麼您應該嘗試下一步。 –
那麼修復它。謝謝。但是我的清單中已經有了許可權限,所以我沒有得到問題所在。 – Dimitris
只需添加到清單文件中就無濟於事。您需要實時請求權限,或者讓用戶轉到設置並啓用權限。第一部分代碼與權限無關。 –