我正在尝试开发一个简单的音乐播放器,我使用 Content Resolver
以及 URI
和 Cursor
来定位所有音乐格式安卓设备。
但是在测试时,我发现即使从设备中删除了一首歌曲,它们仍然存在于歌曲 array
!.
这是为音频文件迭代设备的代码:
ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
if(musicCursor!=null && musicCursor.moveToFirst()){
//get columns
int songArtist = musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int songName = musicCursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME);
int songAlbum = musicCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
int songDuration = musicCursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
int songSource = musicCursor.getColumnIndex(MediaStore.Audio.Media._ID);
int source = musicCursor.getColumnIndex(MediaStore.Audio.Media.DATA);//not used yet
// int gg = musicCursor.getColumnIndex(MediaStore.I)
//add songs to list
do {
long id = musicCursor.getLong(songSource);
String paths = musicCursor.getString(source);
String title = musicCursor.getString(songName);
String artist = musicCursor.getString(songArtist);
String album = musicCursor.getString(songAlbum);
long duration = musicCursor.getLong(songDuration);
songs.add(new Song(id, title, artist, album, duration, paths));
}
while (musicCursor.moveToNext());
}
这是包含每首歌曲详细信息的 Song 类:
package andy.propaganda;
import java.io.Serializable;
public class Song implements /*Parcelable*/ Serializable {
private String album;
private String author;
private String artist;
private String name;
private long dataSource;
private long duration;
private String genre;
private String bitRate;
private byte[] image;
public Song(){
image = null;
}
public Song(long id, String name, String artist, String album, long duration, String tmp){
this.album = album;
this.name = name;
this.artist = artist;
this.duration = duration;
this.dataSource = id;
image = null;
this.bitRate = tmp;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getDataSourse() {
return dataSource;
}
public void setDataSourse(long dataSource) {
this.dataSource = dataSource;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getBitRate() {
return bitRate;
}
public void setBitRate(String bitRate) {
this.bitRate = bitRate;
}
public byte[] getImage() {
return image;
}
public void setImage(byte[] image) {
this.image = image;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
}
最佳答案
删除文件时,需要使用MediaScannerConnection
对其进行扫描。然后文件删除实际上通过 ContentResolver
例如,对于删除 mp3 文件,这样的行可以解决问题:
MediaScannerConnection.scanFile(getContext(), new String[]{file.getPath()}, new String[]{"mp3/*"}, null);
关于android - 为什么内容解析器在android中找到已删除的音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35290959/