如何检索获取安卓图片数据库的所有信息

本文介绍Android系统中多媒体文件的存储及数据库管理机制,包括内部和外部存储空间的区别、媒体文件信息的数据库管理、内容提供者的使用,以及如何通过内容解析者获取图片、音频和视频文件信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Android中所有的多媒体文件除了存储在物理硬盘上,还会将文件信息(路径、id、类型、)保存到数据库中,这样当我们想要获取这些文件的信息时,就不需要耗时的扫描硬盘,只需要读数据库就可以了。Android平台中称手机终端内存为内部存储空间,称SD卡为外部存储空间。针对内部和外部存储空间中的媒体文件信息是分开管理的,各自有独立的数据库管理。外部存储空间和内部存储空间对应的卷标为”external”和”internal”。
2.数据库的数据都会由相应的内容提供者暴露出来,根据预先定义的URI,可以轻松获取这些数据
3.安卓有一个服务专门用于将文件信息扫描添加到数据库中,该服务开机自启动(监听了开机广播),也可以由开发人员在特定的时机主动发送广播更新数据库的信息,比如刚刚保存了一张图片希望立刻在图库中看到。

第一种方式:启动    MediaScanner服务,后台扫描媒体文件
启动方式:
/**
* 异步扫描SD卡多媒体文件,不阻塞当前线程
*
* @param ctx
* @param file 扫描的指定文件
*/
public static void scanMediaAsync(Context ctx, File file) {
Intent scanner = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
scanner.setData(Uri.fromFile(file));
ctx.sendBroadcast(scanner);
}

开始扫描和结束扫描时都会发送一个全局的广播,第三方应用程序也可以通过注册这两个广播来避开在media 扫描的时候往改扫描文件夹里面写入或删除文件
系统发送的开始扫描时广播和扫描完成的广播
Uri uri = Uri.parse("file://" + directories[0]);
  sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_STARTED, uri));
............
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_FINISHED, uri));

如何检索获取安卓图片数据库的所有信息

使用内容解析者通过Uri:  获取这些信息
数据库位置:data/data/com.android.providers/media/databases/external.db
获取图库图片信息的Uri:Media.EXTERNAL_CONTENT_URI和Media.INTERNAL_CONTENT_URI分别是访问外部SD卡和内部存储数据库的Uri
public static List<Map> getMediaImageInfo(Context ctx, Uri uri) {
//可以手动指定获取的列
String[] columns = new String[]{
MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID, MediaStore.Images.Media.TITLE, MediaStore.Images.Media.DISPLAY_NAME
, MediaStore.Images.Media.LATITUDE, MediaStore.Images.Media.LONGITUDE, MediaStore.Images.Media.DATE_TAKEN};
ContentResolver contentResolver = ctx.getContentResolver();
// Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;//外部存储的SD卡的访问Uri
// MediaStore.Images.Media.INTERNAL_CONTENT_URI
Cursor cursor = contentResolver.query(uri, null, null, null, null);//获取全部列
// Cursor cursor = contentResolver.query(uri, columns, null, null, null);//获取指定列
if (cursor != null) {
Map<String, String> item = null;
List<Map> result = new ArrayList<>();
while (cursor.moveToNext()) {
String[] columnNames = cursor.getColumnNames();
item = new HashMap<>();
for (String colnmnName : columnNames) {
int columnIndex = cursor.getColumnIndex(colnmnName);
String columnValue = cursor.getString(columnIndex);
item.put(colnmnName, columnValue);
}
result.add(item);
Log.d("debug", "getMediaImageInfo() item=" + item);
}
Log.d("debug", "getMediaImageInfo() size=" + result.size() + ", result=" + result);
return result;
}
 
return null;
}
获取音视频文件信息和这个大体相同:
音频内容URL:  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI    数据库位置:data/data/com.android.providers/media/databases/external.db
视频内容URL:  MediaStore.Video.Media.EXTERNAL_CONTENT_URI    数据库位置:data/data/com.android.providers/media/databases.external.db
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值