第一行代码(第2版):菜鸡踩坑系列----8.4多媒体

第一行代码 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)
添加后依旧报一样的错误。

回去后继续百度…

目前还未解决:有知道可以发一哈评论哇 哭…2019/12/7

发布了28 篇原创文章 · 获赞 11 · 访问量 2419

猜你喜欢

转载自blog.csdn.net/Y_an_Y/article/details/103440073