簡體   English   中英

嘗試使用媒體播放器在 Android java 應用程序中播放 mp3 時出錯

[英]Error when trying to play mp3 in Android java app with Media Player

我正在嘗試播放正確存儲在我的 res/raw 文件夾中的 mp3 文件。 但要達到這個目標似乎相當困難。 我在導航架構中定義的目的地內有一個按鈕。 它的名字是:英文。 在其代碼中,我們可以找到附加到其視圖中唯一按鈕的此偵聽器......

//Button related to play btn
    view.findViewById(R.id.btn_audio).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            AssetFileDescriptor afd = getActivity().getResources().openRawResourceFd(R.raw.a01);
            try {
                player.setDataSource(afd.getFileDescriptor());
                player.prepare();
                player.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

按下按鈕時,錯誤是:

E/MediaPlayer: error (1, -2147483648)
W/System.err: java.io.IOException: Prepare failed.: status=0x1
    at android.media.MediaPlayer._prepare(Native Method)
    at android.media.MediaPlayer.prepare(MediaPlayer.java:1163)
    at com.example.myapplication.Ingles$3.onClick(Ingles.java:74)
W/System.err:     at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

而且我不知道為什么以及現在該怎么做才能解決這個問題……有什么線索嗎?

嘗試關閉文件描述符

僅當無法讀取提供的 AFD 時,MediaPlayer.Prepare() 才會在使用 AFD 時引發 IOException(請參閱MediaPlayer.setDataSource() )。 開發人員完全負責關閉創建的文件描述符,不關閉它會導致編譯時發生沖突。 您可以在調用 MediaPlayer.setDataSource() 后直接執行此操作。

設置要使用的數據源 (AssetFileDescriptor)。 關閉文件描述符是調用者的責任。 此調用返回后立即執行此操作是安全的。 見 AssetFileDescriptor.close()

    view.findViewById(R.id.btn_audio).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            AssetFileDescriptor afd = getActivity().getResources().openRawResourceFd(R.raw.a01);
            try {
                player.setDataSource(afd.getFileDescriptor());
                afd.close();
                player.prepare();
                player.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

如果問題仍然存在,這可能意味着您的文件已損壞或格式不正確。 更可能的答案是您沒有正確檢索您的 RAW 文件。

我已經嘗試了上述解決方案,但結果一直是錯誤:

    E/MediaPlayer: error (1, -2147483648)
W/System.err: java.io.IOException: Prepare failed.: status=0x1
        at android.media.MediaPlayer._prepare(Native Method)
        at android.media.MediaPlayer.prepare(MediaPlayer.java:1163)
        at com.example.myapplication.Ingles$3.onClick(Ingles.java:75)
        at android.view.View.performClick(View.java:5198)
        at android.view.View$PerformClick.run(View.java:21147)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我要播放的文件是 mp3,所以應該完全兼容。 但我忘了提到我是從導航中的片段調用它......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM