- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为所有音乐文件查询 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI。它工作得很好,但每当我想从我的 sdCard 中删除音乐文件时,列表不会更新。知道如何更新列表吗?
这是我获取音乐文件的代码:
Cursor cursor;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
cursor = getActivity().getContentResolver().query(uri, {"*"}, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String songName = cursor
.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
String path = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DATA));
String albumName = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int albumId = cursor
.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
songs.add(new SongItem(albumName, albumId, path, songname));
} while (cursor.moveToNext());
}
}
最佳答案
新添加的文件被添加到游标中,被删除的文件实际上并不会被删除。
为此,我们需要检查文件是否可用。如果不可用,请使用内容提供程序从数据库中删除它
这就是我解决问题的方法:
Uri files= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor= managedQuery(files, STAR, null,null,null);
cursor.moveToFirst();
for(int r= 0; r<cursor.getCount(); r++, cursor.moveToNext()){
int i = cursor.getInt(0);
File file = new File(cur.getString(cur.getColumnIndex(MediaStore.Audio.Media.DATA)));
if(file.exists()){
// keep files if it is empty
list.add("Keeping : " + cursor.getString(2) + " : id(" + i + ")");
}else{
// delete any play-lists with a data length of '0'
Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, i);
getContentResolver().delete(uri, null, null);
list.add("Deleted : " + cursor.getString(2) + " : id(" + i + ")");
}
}
cursor.close();
关于android - Audio.Media.EXTERNAL_CONTENT_URI 列表在文件删除后不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012510/
我正在尝试使用 Android 的 MediaStore 类并尝试创建一个非常简单的照片库应用程序,这时我注意到有两个图像内容 URI:EXTERNAL_CONTENT_URI 和 INTERNAL_
我正在关注this tutorial创建一个音乐播放器但遇到了障碍。 我可以很好地加载应用程序。但是,尽管手机 SD 卡上的“音乐”文件夹中存在音乐文件,但该列表中并未填充任何音乐文件。 Conten
我有兴趣对特定流派的所有专辑执行查询。 Android 可以使用 MediaStore.Audio.Artists.Albums.getContentUri 轻松地对特定艺术家的专辑执行类似查询,但就
我正在为所有音乐文件查询 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI。它工作得很好,但每当我想从我的 sdCard 中删除音乐文件时,列表不会更新。知道如何
为什么 Android 可能会在卸载/安装 SD 卡操作后删除保存在 Media.EXTERNAL_CONTENT_URI 下的数据?如何避免这种情况? 我使用此 URI 和上下文中的默认内容解析器保
我编写了从 MediaStore.Video.Media.EXTERNAL_CONTENT_URI 中获取视频的代码和 INTERNAL_CONTENT_URI使用 context.getConten
我想通过 contentResolver 插入音乐来获取 uri。 val contentValues = ContentValues() contentValues.put(MediaStore.A
我已按如下方式添加到我的 AndroidManifest.xml 中,但每次单击该按钮时都会出现 SecurityException。
我正在开发一个 Android 应用程序,我必须在其中检测 Android SD 卡中音频文件的变化,包括文件名、文件路径和对其执行的操作。例如,如果我要在我的 SD 卡中添加一个文件,那么我想知道
我正在使用 android MediaStore。我可以获得设备上的音乐列表,以及与每个媒体项目相关的所有详细信息(标题、艺术家、持续时间等) 我希望能够显示专辑列表,以及他们的专辑艺术家。 需要明确
首先感谢您的帮助。 我认为对于不熟悉查询内容提供程序的人来说,这应该是一个相当微不足道的问题。 我需要查询 MediaStore.Images.Media 以获取设备上的所有图像,包括内部存储和 SD
我正在获取设备中所有图像、视频和音频文件的列表。以下代码在 android O (api 27) 之前的所有设备上都可以正常工作。但它不适用于 android Pie 设备(api 28)。 Curs
我是一名优秀的程序员,十分优秀!