第一行代碼(第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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章