open failed: EACCES (Permission denied)

播放音乐报错,无权访问存储

1.第一种情况
E/AwareLog: AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@318a638
E/AwareLog: AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@c65f376
-----------------------
2.第二种情况
D/MediaPlayer: create failed:
    java.io.FileNotFoundException: /sdcard/Fate.mp3: open failed: ENOENT (No such file or directory)
        at libcore.io.IoBridge.open(IoBridge.java:492)
        at java.io.FileInputStream.<init>(FileInputStream.java:160)
        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1184)
        at android.media.MediaPlayer.create(MediaPlayer.java:911)
D/AndroidRuntime: Shutting down VM
    
    
    --------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.apptest02, PID: 2140
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference

Android 版本

compileSdkVersion 30
buildToolsVersion "30.0.2"
应该就是Android 10

代码

    public void startMusic() {
    
    
    
        File file=new File("/sdcard/Fate.mp3");
        mediaPlayer = MediaPlayer.create(IntentActivity.this, Uri.parse(file.getAbsolutePath()));
        mediaPlayer.start();

很明显是权限问题

  1. xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. java代码
    public void processPermissions() {
    
    
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
                PackageManager.PERMISSION_GRANTED) {
    
    
            ActivityCompat.requestPermissions(IntentActivity.this, new String[]{
    
    Manifest.permission.READ_EXTERNAL_STORAGE}, 123);
        }
    }
  1. 额外添加(Android10新增)
    ------------------->>>>>>android:requestLegacyExternalStorage="true"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.apptest02">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:requestLegacyExternalStorage="true">
        
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这个权限把人给整裂开了。

猜你喜欢

转载自blog.csdn.net/weixin_37627774/article/details/108873582