首页 文章

资产管理器,OpenFd?

提问于
浏览
2

我在我想要访问的资产文件夹中有一个文件,我这样做:

AssetFileDescriptor fileSound = am.openFd("myfilepathetc/mymp3.mp3");

但我得到错误:

This file can not be opened as a file descriptor; it is probably compressed

经过一些谷歌搜索后,似乎我需要添加一个扩展名到我的文件,如.mp3,因为Android压缩资源文件夹中的东西,除非它的格式已经压缩,唯一的问题是,我的文件已经是一个mp3,它仍然不会打开 .

有没有一种不妥协的方法呢?或者有没有人有更好的方法从资产访问MP3,请注意我不想从原始文件夹访问它,原因我不打算进入 .

2 回答

  • 0

    为什么不用这个代替:

    private void playAudioSound() {
        try {
            AssetFileDescriptor afd = context.getAssets().openFd("sounds/jad0005a.wav");
            MediaPlayer player = new MediaPlayer();
            player.setDataSource(afd.getFileDescriptor());
            player.prepare();
            player.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
  • 2

    你好吗?我知道这是一个老问题,但我遇到了同样的问题,我发现解决方法非常有用 .

    Java类:

    import java.io.IOException;
    import android.content.Context;
    import android.content.res.AssetFileDescriptor;
    import android.media.MediaPlayer;
    import android.webkit.JavascriptInterface;
    
    public class AudioInterface {
        Context mContext;
    
        AudioInterface(Context c) {
            mContext = c;
        }
    
        //Play an audio file from the webpage
        @JavascriptInterface
        public void playAudio(String aud) { //String aud - file name passed 
                                            //from the JavaScript function
            final MediaPlayer mp;
    
                  try {
                      AssetFileDescriptor fileDescriptor = 
                            mContext.getAssets().openFd(aud);
                                      mp = new MediaPlayer();
                                      mp.setDataSource(fileDescriptor.getFileDescriptor(), 
                                      fileDescriptor.getStartOffset(), 
                                      fileDescriptor.getLength());
                                      fileDescriptor.close();
                                      mp.prepare();
                                      mp.start();
                  } catch (IllegalArgumentException e) {
                                  // TODO Auto-generated catch block
                                  e.printStackTrace();
                      } catch (IllegalStateException e) {
                                  // TODO Auto-generated catch block
                                  e.printStackTrace();
                      } catch (IOException e) {
                                  // TODO Auto-generated catch block
                                  e.printStackTrace();
                  } 
        }
    }
    

    Javascrip文件:

    AndAud.playAudio("audio/One.mp3");
    

    在您的Java WebView上:

    myWebView.addJavascriptInterface(new AudioInterface(this), "AndAud");
    

    参考:http://www.codeproject.com/Tips/677841/Playing-Audio-on-Android-from-an-HTML-File

相关问题