【问题标题】:How to get all the audio file using mediastore如何使用 mediastore 获取所有音频文件
【发布时间】:2016-05-28 06:08:57
【问题描述】:

我正在尝试从设备(内部和 SD 卡)中获取所有媒体文件。到目前为止,我能够从 SD 卡的固定文件夹中获取所有媒体文件。我已经浏览了大多数网页mediastore 。我可以获取媒体信息。但是如何从设备中获取所有音频文件,任何示例都会有所帮助。 我试过这种方式` public class SongDto {

public long songId;
public String songTitle;
public String songArtist;
public String path;
public short genre;
public long duration;
public String album;
public Bitmap albumArt;

public String toString() {
return String.format("songId: %d, Title: %s, Artist: %s, Path: %s, Genere: %d, Duration %s",
        songId, songTitle, songArtist, path, genre, duration);
}

并在另一个类名中获取这些值

public class Utils {
private Context _context;

// constructor
public Utils(Context context) {
    this._context = context;
}
public static ArrayList<SongDto> getMusicInfos(Context context) {

    ArrayList<SongDto> musicInfos = new ArrayList<SongDto>();

现在我正在尝试在另一个类中获取歌曲标题

private ArrayList<SongDto> musicInfos;
private Utils utils;
private ArrayList<String> songPaths = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    utils = new Utils(this);
    songPaths = utils. getMusicInfos(songTitle);
}

private void update(){
    ArrayAdapter<String> list=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,musicInfos.add(songTitle) );
}
}

我如何才能只获得所需的数组,如歌曲 ID、歌曲艺术家、歌曲持续时间的数组。以及我做错的地方。如何设置 getMusicInfos 方法 `

【问题讨论】:

  • 您可以获取 sd 卡的所有文件夹,然后检查包含您的媒体文件的任何文件夹,如果它包含您的文件,则将其添加到您的临时 ARRAYLIST 中...试试这些如有疑问请告诉我...stackoverflow.com/a/9531063/3946958
  • 我想从内部和外部存储中获取音频文件

标签: java android file mediastore


【解决方案1】:

你可以试试这个

 ArrayList audio=new ArrayList();
 Cursor c=getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Media.DISPLAY_NAME}, null, null, null);


while(c.moveToNext())
 {
String name=c.getString(c.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
audio.add(name);

 }

同样你也可以通过指定INTERNEL_CONTENT_URI来获取内部存储音频文件

【讨论】:

    【解决方案2】:

    我使用此代码获取所有歌曲数据

    public static ArrayList<SongDto> getMusicInfos(Context context) {
    
        ArrayList<SongDto> musicInfos = new ArrayList<SongDto>();
    
        Cursor cursor = context.getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
                MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
        if (cursor == null) {
            return null;
        }
    
    
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.moveToNext();
    
    
            int isMusic = cursor.getInt(cursor
                    .getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); 
    
            if (isMusic != 0) {
                SongDto music = new SongDto();
    
    
                music.path = cursor.getString(cursor
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
    
                if (!new File(music.path).exists()) {
                    continue;
                }
    
    
                music.songId = cursor.getLong(cursor
                        .getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
    
                music.songTitle = cursor.getString(cursor
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
    
    
                music.songTitle = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
    
    
                music.album = cursor.getString(cursor
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
    
    
                music.songArtist = cursor.getString(cursor
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
    
                music.duration = cursor
                        .getLong(cursor
                                .getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
    
                MediaMetadataRetriever mmr = new MediaMetadataRetriever();
                mmr.setDataSource(music.path);
                music.albumArt = getBitmap(mmr.getEmbeddedPicture());
                mmr.release();
    
                musicInfos.add(music);
            }
        }
    
        return musicInfos;
    }
    

    并将其用作数据对象

    public class SongDto {
    
    public long songId;
    public String songTitle;
    public String songArtist;
    public String path;
    public short genre;
    public long duration;
    public String album;
    public Bitmap albumArt;
    
    public String toString() {
        return String.format("songId: %d, Title: %s, Artist: %s, Path: %s, Genere: %d, Duration %s",
                songId, songTitle, songArtist, path, genre, duration);
    }
    }
    

    AbumArt 可能为空

    获取歌曲ID作为列表

     String[] columns = { MediaStore.Audio.Media._ID };
        cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,columns, null, null, null);
    

    并从游标中获取数据。要同时获取内部和外部存储歌曲列表,目前我还没有解决方案。

    【讨论】:

    • 所以我必须设置两次数组列表才能获取外部和内部歌曲?
    • 以及如何在数组中获取给定的信息,例如 sondId
    【解决方案3】:

    以下代码获取手机中的所有 mp3 文件(包括从 messangers 下载的音频文件、录制文件等):

    private fun getAllMusics(): List<String> {
        val result = mutableListOf<String>()
    
        val cursor = contentResolver.query(
            MediaStore.Files.getContentUri("external"),
            arrayOf(MediaStore.Files.FileColumns.DATA),
            "${MediaStore.Files.FileColumns.MIME_TYPE} = ?",
            arrayOf(MimeTypeMap.getSingleton().getMimeTypeFromExtension("mp3")),
            MediaStore.Files.FileColumns.DATE_ADDED
        )
    
        cursor?.let {
            if (cursor.moveToFirst()) {
                while (cursor.moveToNext()) {
                    result.add(cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA)) ?: "--")
                }
            }
        }
    
        return result
    }
    

    您可以通过修改selectionselection args参数来获取其他音频文件(如WAV、WMA等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多