Android使用 MediaStore寻找音乐文件,并保存相关信息,但是音乐好像找不全?纯小白,求助

该代码段展示了如何在Android应用中获取外部存储上的所有音乐文件信息。它通过查询MediaStore内容提供者来获取歌曲的名称、时长、歌手、专辑和年份等信息,并将这些数据存储在Music实体类的对象中。然后过滤掉时长小于30秒的文件,最后返回包含所有符合条件的音乐信息的列表。
摘要由CSDN通过智能技术生成

寻找功能实现

import static android.content.ContentValues.TAG;

import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log;

import androidx.annotation.NonNull;

import com.example.entity.Music;

import java.util.ArrayList;
import java.util.List;

public class AudioUtils {

    @NonNull
    @SuppressLint("Range")
    public static List<Music> getAllSongs(@NonNull Context context) {

        //容器
        List<Music> musics = new ArrayList<>();
        //获取音乐文件路径
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

        //开始查询
        @SuppressLint("Recycle")
        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
        //开始遍历游标
        while (cursor.moveToNext()) {
            Music music = new Music();
            // 文件名
            music.setFileName(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)));
            // 歌曲名
            music.setTitle(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
            // 时长
            music.setDuration(cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)));
            // 歌手名
            music.setSinger(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)));
            // 专辑名
            music.setAlbum(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)));
            // 年代
            if (cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.YEAR)) != null) {
                music.setYear(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.YEAR)));
            } else {
                music.setYear("未知");
            }
            if (cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)) != null) {
                music.setFileUrl(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
            }
            //排除过小的音频文件
            if (cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)) >= 30000) {
                musics.add(music);
            }
            Log.d(TAG, "getAllSongs: " + music);
        }
        //关闭游标
        cursor.close();

        return musics;
    }

}

使用中用到的entity类

package com.example.entity;

import android.annotation.SuppressLint;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Music {
 
	private String fileName;
	private String title;
	private String duration;
	private String singer;
	private String album;
	private String year;
	private String type;
	private String size;
	private String fileUrl;
 
	public String getFileName() {
		return fileName;
	}
 
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
 
	public String getTitle() {
		return title;
	}
 
	public void setTitle(String title) {
		this.title = title;
	}
 
	public String getDuration() {
		return duration;
	}
 
	public void setDuration(long duration) {
		@SuppressLint("SimpleDateFormat")
		SimpleDateFormat format = new SimpleDateFormat("mm:ss");
		this.duration =format.format(new Date(duration));
	}
 
	public String getSinger() {
		return singer;
	}
 
	public void setSinger(String singer) {
		this.singer = singer;
	}
 
	public String getAlbum() {
		return album;
	}
 
	public void setAlbum(String album) {
		this.album = album;
	}
 
	public String getYear() {
		return year;
	}
 
	public void setYear(String year) {
		this.year = year;
	}
 
	public String getType() {
		return type;
	}
 
	public void setType(String type) {
		this.type = type;
	}
 
	public String getSize() {
		return size;
	}
 
	public void setSize(String size) {
		this.size = size;
	}
 
	public String getFileUrl() {
		return fileUrl;
	}
 
	public void setFileUrl(String fileUrl) {
		this.fileUrl = fileUrl;
	}
 
	public Music() {
		super();
	}
 
	public Music(String fileName, String title, String duration, String singer,
				 String album, String year, String type, String size, String fileUrl) {
		super();
		this.fileName = fileName;
		this.title = title;
		this.duration = duration;
		this.singer = singer;
		this.album = album;
		this.year = year;
		this.type = type;
		this.size = size;
		this.fileUrl = fileUrl;
	}
 
	@Override
	public String toString() {
		return "Song [fileName=" + fileName + ", title=" + title
				+ ", duration=" + duration + ", singer=" + singer + ", album="
				+ album + ", year=" + year + ", type=" + type + ", size="
				+ size + ", fileUrl=" + fileUrl + "]";
	}
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值