使用Android播放jar资源中的音频文件

时间:2013-02-21 10:27:03

标签: java android android-mediaplayer

如果我在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库中播放?

5 个答案:

答案 0 :(得分:1)

我不认为可以使用Android中的.jar中的方法开始播放mp3文件。如果您需要保留.jar并播放其中的mp3,我会暂时将mp3解压缩到SD卡并从那里播放。

答案 1 :(得分:0)

我只看到两个解决方案:

  • jar文件必须包含mp3。
  • 添加基本网址作为参数。

答案 2 :(得分:0)

Dalvik不了解你的图书馆,它只知道你的应用程序。我认为您可以解决此问题的一种方法是将特定于应用程序的资源作为参数传递给playAudioFile()方法(或者,您可以初始化其类的属性)。这样,您可以将文件复制到属于您的应用程序的正确目录,并且仍然可以为您的类重用。

答案 3 :(得分: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( );

答案 4 :(得分:0)

我怀疑这个问题与SO上的另一个问题非常相似(但我不知道如何标记)。我提供给那个人的答案是:Convert a string to a resource Uri for mp3 playback

实质上,您需要获取正确的URI,如上面的链接所示。