第一行代码 8.4 播放音频文件
(不一定有答案,就记录一下,万一找到了解决方法就可以方便大家了)
解决
应该问题是在于Android后面的权限问题,在书上使用的代码使用的明文路径。
在配置文件中添加 允许请求外部存储 即可
即在AndroidManifest.xml文件中…还是直接附上代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.playaudiotest">
<uses-permission android:name="android.permission.WRITE_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:usesCleartextTraffic="true"
--------------------------------------------------
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>
8.4.1
已确认代码无误,权限已加,手机根目录已放置相应同名文件。
使用真机运行的代码(手机型号:redmi K20)模拟器也尝试不成功,点击按钮后无效。
报错如下:
E/MediaPlayerNative: start called in state 1, mPlayer(0x0)
error (-38, 0)
E/MediaPlayer: Error (-38,0)
E/MediaPlayerNative: start called in state 0, mPlayer(0x0)
按这篇博客的说法 出现上面的报错可能是路径不对,因为权限我已经添加上了。
https://blog.csdn.net/a277163145/article/details/46888975
这里还是使用的书上的代码,我在下面这段代码打印了一下文件的路径是否存在
private void initMediaPlayer(){
try{
File file=new File(Environment.getExternalStorageDirectory(),"music.mp3");
Log.d("AAA", "initMediaPlayer: "+file.getPath());
mediaPlayer.setDataSource(file.getPath());
mediaPlayer.prepare();
}catch (Exception e){
e.printStackTrace();
}
}
打印出的结果为:
com.example.playaudiotest D/AAA: initMediaPlayer: /storage/emulated/0/music.mp3
这应该是意味着文件是存在的。
下面尝试修改一下路径进行尝试:
private void initMediaPlayer(){
try{
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file=new File(Environment.getExternalStorageDirectory(),"music.mp3");
String path="/storage/emulated/0/1/music.mp3";
//
Log.d("AAA", "initMediaPlayer: "+path);
mediaPlayer.setDataSource(file.getPath());
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
}
}catch (Exception e){
e.printStackTrace();
}
}
为了查找如何获取文件路径观看了:https://blog.csdn.net/u012758497/article/details/85077749
(为了避免path的有转义字符的存在,我打印了path的字符(java字符串有点忘了)hahhah
打印结果:/storage/emulated/0/1/music.mp3)
添加后依旧报一样的错误。
回去后继续百度…