简体   繁体   English

找不到媒体播放器文件异常

[英]Media Player File not found exception

I'm writing a basic android mp3 player app that uses the MediaPlayer app to play an mp3 file stored locally on an Android phone. 我正在编写一个基本的android mp3播放器应用程序,该应用程序使用MediaPlayer应用程序播放本地存储在Android手机上的mp3文件。

However, whenever I try calling MediaPlayer.create() i get a java.io.FileNotFoundException . 但是,每当我尝试调用MediaPlayer.create()时,都会得到java.io.FileNotFoundException

I've checked to make sure that the mp3 is in the correct path and I've tried running this on both an emulated Android and my own phone but I keep getting the same error. 我已检查以确保mp3的路径正确,并且尝试在模拟的Android和我自己的手机上都运行此程序,但我始终遇到相同的错误。

Here's my onCreate function where I'm having the problem: 这是我遇到问题的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);
}

Here's the error I'm getting: 这是我得到的错误:

java.io.FileNotFoundException: /storage/emulated/0/Download/sam_stone.mp3 (Permission denied) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:146) at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1088) at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1067) at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1009) at android.media.MediaPlayer.setDataSource(MediaPlayer.java:967) at android.media.MediaPlayer.create(MediaPlayer.java:874) at android.media.MediaPlayer.create(MediaPlayer.java:851) at android.media.MediaPlayer.create(MediaPlayer.java:830) at hn.mediaplayer.MainActivity.onCreate(MainActivity.java:48) at android.app.Activity.performCreate(Activity.java:6662) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app 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 .ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 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)

Add permission in AndroidManifest.xml AndroidManifest.xml中添加权限

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

and also add run time permission above android version 5.0 并在android 5.0以上版本中添加运行时权限

First thing is you need to add the permission to AndiodManifest.xml file 首先,您需要向AndiodManifest.xml文件添加权限

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

Then in your activity 然后在你的活动中

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;
}}

Then the permission result call back where you can resume the task : 然后,权限结果回叫,您可以在其中继续执行任务:

@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]);
}}

You have to add READ_EXTERNAL_STORAGE permission in manifest. 您必须在清单中添加READ_EXTERNAL_STORAGE权限。

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

and from marshmallow and above you have to request from the users for Dangerous permission . 在棉花糖及以上的产品中,您必须向用户申请危险许可

read doc for requesting runtime permission 阅读文档以请求运行时权限

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM