资产管理器,OpenFd?

时间:2011-11-01 15:52:38

标签: android

我希望访问的资产文件夹中有一个文件,我是这样做的:

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 :(得分:2)

为什么不用这个代替:

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();
    }
}

答案 1 :(得分:0)

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

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