- 7.读取
- 7.1.AndroidManifest.xml添加权限
- 7.2.安装之后手动设置权限
- 7.3.歌曲信息类
- 7.4.读取歌曲
整个程序我觉得最大的坑就是在这里了,我找了很多文章,但是都是只给一半的,比如他说添加一些代码,又没有指明文件或者文件中哪个位置,所以就想自己写一篇,也许有用。
7.1.AndroidManifest.xml添加权限添加的是这两句,就是给读写权限。
整体代码如下:
7.2.安装之后手动设置权限
注意,在虚拟机运行我不知道是什么情况,但是如果你在真机上运行,那么你注意,你安装完之后,并不是直接打开App的,而是停留在安装界面,要你设置权限,注意设置,不然,你打开App就会闪退,注意设置权限。
7.3.歌曲信息类这个是网上弄的,感觉很全,很好,不过我自己没用到那么多信息,找不到链接了,真的很好。个人没有用到那么多,但是如果真的要弄一个播放器
package com.example.myapplication;
import androidx.annotation.NonNull;
public class Song {
private String fileName;
private String title;
private int 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 int getDuration() {
return duration;
}
public void setDuration(int duration) {
this.duration = 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 Song() {
super();
}
public Song(String fileName, String title, int 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;
}
@NonNull
@Override
public String toString() {
return "Song [fileName=" + fileName + ", title=" + title
+ ", duration=" + duration + ", singer=" + singer + ", album="
+ album + ", year=" + year + ", type=" + type + ", size="
+ size + ", fileUrl=" + fileUrl + "]";
}
}
7.4.读取歌曲
public void getAllSongs(Context context) {
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
MediaStore.Audio.Media.IS_MUSIC,null, MediaStore.Audio.Media.IS_MUSIC);
if (cursor != null) {
Song song;
while (cursor.moveToNext())
{
song = new Song();
int i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
song.setTitle(cursor.getString(i));
i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
song.setSinger(cursor.getString(i));
i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
song.setFileName(cursor.getString(i));
song.setFileUrl(cursor.getString(1));
Log.d(song.getFileName(),"2");
musics.add(song);
}
cursor.close();
}
}
**(1)Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
MediaStore.Audio.Media.IS_MUSIC,null, MediaStore.Audio.Media.IS_MUSIC);
**
详细解析
有五个参数,链接里的内容讲得挺好,我也是第一次用,所以也是不太懂,不过第一个应该就是 手机的路径吧,第二个是一个条件,我之前没加的时候把录音也一并读取的,加了就只能获取mp3文件了。
int i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); song.setTitle(cursor.getString(i));
这个是获取歌曲名称的位置,然后以这个位置去获取数据,当然就是0,1,2,3,不过我还不知道哪些代表什么,只有一些比较明显的单词才能看得出来。
如果能够再次找到上面Song类是出自哪篇文章的话,就好了,就能更好的看出来了。
用的时候自己试试吧。
public void getAllSongs(Context context)
这里传入的参数是这样的
OK.。



