2013-02-21 46 views
2

如果我有一個罐子庫這個方法:播放從罐子資源的音頻文件與Android

public void playAudioFile() 
{ 
    ClassLoader cLoader = getClass().getClassLoader(); 
    URL url = cLoader.getResource("audio.mp3"); // in the resource of the jar library 
    System.out.println(url.toString()); 

    MediaPlayer mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setDataSource(url); 
} 

編譯庫後,我有:MySDK.jar

當我添加了MySDK。 jar文件放進我的Android應用程序,並嘗試播放音頻文件:

private void playAudio() 
{ 
    MySDK.Audio audio = new MySDK.Audio(); 
    audio.playAudioFile(); 
} 

編譯Android應用程序後,我有:mysampleapp.apk

當調試應用程序,音頻文件無法播放,因爲:

System.out.println(url.toString()); 

給出:

jar:file:/data/app/com.mysampleapp.apk!/audio.mp3 

音頻的路徑應該是從jar文件不是從示例應用程序。因此,音頻文件無法播放。

我做錯了什麼,以及如何從jar庫中播放音頻文件作爲資源文件?

+3

您可能不應該將音頻文件存儲在JAR文件中以開始。在SD卡/數據庫上使用一些應用程序存儲。 – 2013-02-24 10:18:07

回答

0

我只看到兩個解決方案:

  • 的JAR文件必須包含MP3。
  • 添加基礎URL作爲參數。
+0

我更喜歡該jar包含mp3,但如果我將該jar包含在應用程序中,我得到了問題:jar:file:/data/app/com.mysampleapp.apk!/audio.mp3 – olidev 2013-02-25 22:38:09

0

Dalvik不知道你的圖書館,它只知道你的應用程序。我認爲你可以解決這個問題的一種方法是將特定於應用的資源作爲參數傳遞給playAudioFile()方法(或者,也許可以初始化其類的屬性)。這樣你可以將文件複製到屬於你的應用程序的適當目錄中,並且仍然可以重用你的類。

0

嗨嘗試這些代碼在你的playAudioFile()方法

URL defaultSound = getClass().getResource("/folder/folder/audio.wav"); 
    File soundFile = new File(defaultSound.toURI()); 
    System.out.println("defaultSound " + defaultSound); // check the URL! 
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(defaultSound); 
    Clip clip = AudioSystem.getClip(); 
    clip.open(audioInputStream); 
    clip.start(); 
1

我不認爲可以使用Android中的.jar中的方法開始播放mp3文件。如果您需要保留.jar並播放其中的mp3,我會暫時將mp3解壓縮到SD卡並從此播放。