当前位置: 首页 > 知识库问答 >
问题:

用光标读取资产文件夹中的mp3文件

杜英范
2023-03-14

我知道这可能是一个愚蠢的问题,但我对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());
             }

共有1个答案

单修德
2023-03-14

我试图修改它以从资产文件夹中获取它,但我无法理解

你不能。MediaStore对应用程序的资产目录一无所知。

我可以用下面的代码获取资产内的文件,但在这种情况下,我无法获取音频数据

对的我不知道MediaStore有什么方法可以为您获取这些数据。您可以使用从AssetManager获得的文件描述符来尝试MediaMetadataRetriever。

然而,如果你在开发机器上获取数据并将其包含在应用程序中,而不是在运行时从媒体文件中获取数据,那么效率会更高。有无数的媒体播放器可以告诉你媒体文件的标题、专辑和艺术家。收集这些信息并将其放在你的应用程序中:

  • 作为字符串资源
  • 作为包含所有数据的XML资源
  • 作为包含所有数据的资产/中的JSON文件
  • 作为Java/静态编程语言代码(例如,Java静态字段)
  • 等等。
 类似资料:
  • 我是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