2011-11-01 69 views
2

我有我的資產文件夾中的文件,我希望訪問,我通過這樣做:資產管理器,OpenFd?

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

但我得到的錯誤:

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

經過一番google搜索,似乎我需要添加對我的文件進行擴展,例如.mp3作爲Android壓縮assets文件夾中的東西,除非它的格式已經被壓縮,唯一的問題是,我的文件已經是mp3了,但它仍然不會打開。

有沒有不妥協的方法?或者有沒有人有更好的方式來訪問從資產的MP3,請注意我不想從原始文件夾訪問它,原因是我不會打擾進入。

回答

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

這給了我的輸入流。我如何使用聲音池? – panthro

+0

並且teh文件仍然被壓縮 – panthro

+0

好的,請查看我編輯的答案。該代碼應該可以工作。 –

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

+0

JavaScript?!這與問題無關 – Raptor