簡體   English   中英

找不到媒體播放器文件異常

[英]Media Player File not found exception

我正在編寫一個基本的android mp3播放器應用程序,該應用程序使用MediaPlayer應用程序播放本地存儲在Android手機上的mp3文件。

但是,每當我嘗試調用MediaPlayer.create()時,都會得到java.io.FileNotFoundException

我已檢查以確保mp3的路徑正確,並且嘗試在模擬的Android和我自己的手機上都運行此程序,但我始終遇到相同的錯誤。

這是我遇到問題的onCreate函數:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath() + 
       "/Download/sam_stone.mp3");

    med = MediaPlayer.create(getApplicationContext(), uri);
}

這是我得到的錯誤:

java.io.FileNotFoundException:/storage/emulated/0/Download/sam_stone.mp3(權限被拒絕)在java.io.FileInputStream.open(本機方法)在java.io.FileInputStream。(FileInputStream.java:146)在Android android.media.MediaPlayer.setDataSource(MediaPlayer.java:1067)上的.media.MediaPlayer.setDataSource(MediaPlayer.java:1088)android.media.MediaPlayer上的android.media.MediaPlayer.setDataSource(MediaPlayer.java:1009)。 setDataSource(MediaPlayer.java:967)(位於android.media.MediaPlayer.create(MediaPlayer.java:874)(位於android.media.MediaPlayer.create(MediaPlayer.java:851))(android.media.MediaPlayer.create(MediaPlayer.java) :830)位於hn.mediaplayer.MainActivity.onCreate(MainActivity.java:48)(位於android.app.Activity.performCreate(Activity.java:6662)(位於android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)) .app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)在android.app android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460)上的.ActivityThread.-wrap12(ActivityThread.java)android.os.Looper.loop上的android.os.Handler.dispatchMessage(Handler.java:102) (Looper.java:154)在android.app.ActivityThread.main(ActivityThread.java:6077)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run.java.lang.reflect.Method.invoke(本機方法) (ZygoteInit.java:866)位於com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

AndroidManifest.xml中添加權限

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

並在android 5.0以上版本中添加運行時權限

首先,您需要向AndiodManifest.xml文件添加權限

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

然后在你的活動中

public  boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
    if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
            == PackageManager.PERMISSION_GRANTED) {
        Log.v(TAG,"Permission is granted");
        return true;
    } else {

        Log.v(TAG,"Permission is revoked");
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        return false;
    }
}
else { 
    Log.v(TAG,"Permission is granted");
    return true;
}}

然后,權限結果回叫,您可以在其中繼續執行任務:

@Override
 public void onRequestPermissionsResult(int requestCode, String[] permissions, 
 int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
    Log.v(TAG,"Permission: "+permissions[0]+ " "+grantResults[0]);
}}

您必須在清單中添加READ_EXTERNAL_STORAGE權限。

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

在棉花糖及以上的產品中,您必須向用戶申請危險許可

閱讀文檔以請求運行時權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM