我知道这可能是一个愚蠢的问题,但我对Android开发还不熟悉,经过一个小时的搜索,我找不到该怎么做。我正在尝试开发一个音乐应用程序,我从下面的教程中得到了帮助。
https://www.sitepoint.com/a-step-by-step-guide-to-building-an-android-audio-player-app/
在本教程中,通过Uri=MediaStore读取mp3文件。音频媒体外部内容URI 。然而,我只想读我项目中的歌曲。当我搜索时,在项目中放置mp3文件的最佳位置是在资产文件夹中。
在android项目中放置mp3文件的正确位置
教程中的代码使用光标获取mp3数据
private void loadAudio() {
ContentResolver contentResolver = getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
Cursor cursor = contentResolver.query(uri, null, selection, null, sortOrder);
if (cursor != null && cursor.getCount() > 0) {
audioList = new ArrayList<>();
while (cursor.moveToNext()) {
String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
// Save to audioList
audioList.add(new Audio(data, title, album, artist));
}
}
cursor.close();
}
我试图修改它以从资产文件夹中获取它,但我无法理解。我试图将uri更改为file:///android_asset/RELATIVEPATH然而,在这种情况下,游标返回null。我可以用下面的代码获取资产内的文件,但在那种情况下,我无法获取音频数据;
private void listFiles() {
Resources res = getResources(); //if you are in an activity
AssetManager am = res.getAssets();
String fileList[] = new String[0];
try {
fileList = am.list("Content");
} catch (IOException e) {
e.printStackTrace();
}
if (fileList != null)
{
}
audioList = new ArrayList<>();
for ( int i = 0;i<fileList.length;i++)
{
File file = new File(fileList[i]);
if ((file.getName()).endsWith(".mp3")) {
String data = file.getName();
Audio audio = new Audio(file.getName(),data,data,data);
audioList.add(audio);
Log.d("Hata",file.getPath());
Log.i("Hata", "getEpubFilesFromFileManager: " + ".." + file.getName() +"Path"+ file.getPath());
}
}
}
当我调试MediaStore。音频。媒体。DATA
返回文件路径。我还尝试在第二个函数中使用file.getPath()
,但不起作用。所以我的问题是,如何在从资产文件夹迭代时使用光标?
编辑:我得到一个文件的AssetFileDescriptor,然后在mediaplayer中,我用AssetFileDescriptor而不是url来播放它。这是可行的,但我有两个问题;
>
我无法使用这种方法获取持续时间或标题信息。
File file = new File(fileList[i]);
if ((file.getName()).endsWith(".mp3")) {
String data = file.getName();
try {
AssetFileDescriptor descriptor = am.openFd("Contents/"+data);
Audio audio = new Audio(descriptor,data,data,data,data);
audioList.add(audio);
} catch (IOException e) {
e.printStackTrace();
}
Log.d("Hata",file.getPath());
//Log.i("Hata", "getEpubFilesFromFileManager: " + ".." + file.getName() +"Path"+ file.getPath());
}
我试图修改它以从资产文件夹中获取它,但我无法理解
你不能。MediaStore对应用程序的资产目录一无所知。
我可以用下面的代码获取资产内的文件,但在这种情况下,我无法获取音频数据
对的我不知道MediaStore有什么方法可以为您获取这些数据。您可以使用从AssetManager获得的文件描述符来尝试MediaMetadataRetriever。
然而,如果你在开发机器上获取数据并将其包含在应用程序中,而不是在运行时从媒体文件中获取数据,那么效率会更高。有无数的媒体播放器可以告诉你媒体文件的标题、专辑和艺术家。收集这些信息并将其放在你的应用程序中:
资产/
中的JSON文件静态
字段)我是Android的新手。 我已经尝试了这个论坛的所有帖子。但未能取得成功。我正在尝试将mp3文件从asset文件夹共享到whatsapp。 下面是我的代码。 这是我在主活动中的代码: ContentProvider中的代码: 清单文件:
如何从资源文件夹的子文件夹中读取文件。 我在资源文件夹中有一些json文件,例如: 现在我想在我的课堂上读到这个 这是我正在尝试的,但是失败了。 不起作用,那么我正在尝试: 这两样东西都不工作。
问题内容: 我想拥有一个从MP3文件读取元数据的程序。我的程序还应该能够编辑这些元数据。我能做什么? 我必须搜索一些开源代码。但是他们有代码;但不是简化工作的想法。 当我进一步阅读时,发现元数据存储在MP3文件本身中。但是我还不能完全了解我的婴儿计划。 任何帮助将不胜感激; 一个程序或一个非常主意(例如算法)。:) 问题答案: mp3文件的最后128个字节包含有关mp3文件的元数据。,您可以编写一
我有一个名为的项目,它有以下结构: 所以这两个文件的路径是: 我想读测试文件。TestDataProvider中的json。JAVA 我曾经用过 我看到从URL res=getClass(). getClassLoader(). getResources("testfile.json")返回; 有人能帮我吗?
如何使用URI从资源文件夹的子文件夹中读取文件 资源文件夹中有一些json文件,如: 现在我想在我的课堂上读这个 这是我正在尝试的。 我的东西工作正常,但我遇到的问题是我不想使用< code>toURI,因为它会失败。
问题内容: 我正在使用Spring Boot和。我正在尝试从文件夹读取一个文件。我尝试了几种不同的方法,但无法正常工作。这是我的代码。 这是文件的位置。 在这里,我可以看到文件夹中的文件。 但是,当我运行代码时,出现以下错误。 我在代码中做错了什么? 问题答案: 在花费大量时间尝试解决此问题之后,终于找到了可行的解决方案。该解决方案利用了Spring的ResourceUtils。也应该适用于jso