MediaPlayer读内存的问题
播放音乐报错,无权访问存储
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();
很明显是权限问题
- xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- 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);
}
}
- 额外添加(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>
这个权限把人给整裂开了。