在Android项目中放置mp3文件的正确位置

42

是否有类似于res/drawable的文件夹来存放mp3或其他音频文件?如果有,它是什么,我该如何从应用程序访问它?


你可以使用raw文件夹或asset文件夹。关于raw文件夹,请参考此链接:https://dev59.com/XWs05IYBdhLWcg3wB9af;关于asset文件夹,请参考此代码:https://stackoverflow.com/questions/9493983/save-audio-file-in-raw-or-assets-folder-to-sdcard-android。同时,也请参考以下链接了解Asset和Raw之间的区别:https://dev59.com/Km035IYBdhLWcg3wK8wm。 - Dheeresh Singh
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Prateek Joshi
4个回答

35

将这样的 .mp3 或任何其他文件放置在 assets 文件夹中是最好的选择。

一旦存储了这些文件,它们就会成为您的安卓应用程序的一部分,可以轻松读取。这个教程讲得很清楚。

 AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
 MediaPlayer player = new MediaPlayer();
 player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
 player.prepare();
 player.start();

你也可以将文件存储在 raw 文件夹中,并通过指定路径直接读取它。示例如下:

int resID=getResources().getIdentifier(fname, "raw", getPackageName());
MediaPlayer mediaPlayer=MediaPlayer.create(this,resID);

8
资产还是原始数据?请让我知道一个具体的答案。 - Ashish Dwivedi
我运用了资产选项,有些幸运。我在这段代码中添加了一个标志,以防每次单击播放按钮时都重新播放mp3。 - Benjamin Castor
我将文件放置在RAW文件夹中。 - Rahul Bali
我在想我们是否可以最初创建一个数据库并将文件存储在数据库中? - juztcode
@juztcode 不推荐将文件存储在数据库中(例如,这会导致数据库大小增加,从而减慢加载数据库的速度)。 - Masoud Maleki
原始文件夹和资产文件夹之间的区别: https://dev59.com/YWkw5IYBdhLWcg3w6ewb - Masoud Maleki

13

以下是您可以简单遵循的步骤。

  1. 使用包含您要添加音频剪辑/媒体文件的项目打开Android Studio。

  2. 在资源文件夹中创建一个raw文件夹。

  3. 通过将其简单复制并粘贴到raw文件夹中,向raw文件夹添加媒体文件。

  4. 这里我们添加了一个名为“ring.mp3”的媒体文件。现在打开所需活动的Java文件,在MainActivity中添加音频。

  5. 进一步添加此代码。

    MediaPlayer ring = MediaPlayer.create(MainActivity.this, R.raw.ring); ring.start();

  6. 现在运行应用程序,当应用程序启动时会播放音乐。


好的,我会遵循你在这里的建议。 - gumuruh

7
你应该将 .mp3 文件保存在 res/raw 文件夹中。AndroidStudio 可以识别这个 raw 文件夹(相比之下,它不会自动识别 res/assets 文件夹)。
要播放 music.mp3: mediaPlayer = MediaPlayer.create(ctx, R.raw.cat_meow); mediaPlayer.start(); 注意方便的使用 R. 语法。

3

将它放入您的资产文件夹中,最好是在assets/raw/myfile.mp3下。您可以使用以下方法访问它:

String mp3File = "raw/music.mp3";
AssetManager assetMan = getAssets();
MediaPlayer media = new MediaPlayer();
FileInputStream mp3Stream = assetMan.openFd(mp3File).createInputStream();
media.setDataSource(mp3Stream.getFD());
media.prepare();
media.start();

这个不起作用。也许应该从路径中删除assets/。 - Mohammad Moghimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接