簡體   English   中英

使用Android從jar資源播放音頻文件

[英]Play an audio file from jar resource with Android

如果我在jar庫中有此方法:

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庫中將音頻文件作為資源文件播放?

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

我只看到兩種解決方案:

  • jar文件必須包含mp3。
  • 添加基本​​URL作為參數。

Dalvik不了解您的資料庫,僅了解您的應用程序。 我認為您可以解決此問題的一種方法是,將特定於應用程序的資源作為參數傳遞給playAudioFile()方法(或者,也許可以初始化其類的屬性)。 這樣,您可以將文件復制到屬於您的應用程序的正確目錄中,並且仍然可以重用您的類。

嗨,請在您的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( );

我懷疑這個問題與SO上的另一個問題非常相似(但我不知道如何標記該問題)。 我對此提供的答案是: 將字符串轉換為資源Uri以便進行mp3播放

本質上,如上面的鏈接所述,您需要正確獲取URI。

暫無
暫無

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

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