Android MediaStore是用于访问和管理多媒体内容的系统数据库,它存储了设备上的照片、视频、音频等文件的信息。在使用MediaStore的过程中,我们需要授予一些权限来访问和操作这些多媒体内容。本文将介绍使用Android MediaStore所需的权限,并提供相应的代码示例。
Android MediaStore权限
使用Android MediaStore需要以下权限:
- READ_EXTERNAL_STORAGE:允许应用读取设备上的多媒体文件。
- WRITE_EXTERNAL_STORAGE:允许应用写入多媒体文件到设备上。
这两个权限都属于存储权限,需要在AndroidManifest.xml文件中进行声明。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在Android 10及以上的版本中,READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限被分为两个级别:legacy
和all
。legacy
级别只允许访问应用自己的目录以及公共目录,而all
级别还允许访问其他应用的目录。默认情况下,应用被授予legacy
级别的权限。
如果需要在Android 10及以上版本中访问其他应用的目录,需要在AndroidManifest.xml文件中声明requestLegacyExternalStorage
属性,并将其值设置为true
。
<application
android:requestLegacyExternalStorage="true"
...
</application>
使用MediaStore访问照片
下面是一个使用MediaStore访问照片的示例:
// 查询照片的Uri和字段
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME };
// 执行查询
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
// 遍历结果
if (cursor != null && cursor.moveToFirst()) {
do {
// 获取照片的ID和名称
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));
// 根据ID构建照片的Uri
Uri photoUri = ContentUris.withAppendedId(uri, id);
// 在此处进行照片的操作,例如显示、复制、删除等
// ...
} while (cursor.moveToNext());
}
// 关闭Cursor
if (cursor != null) {
cursor.close();
}
上述代码首先定义了要查询的照片的Uri和字段,在执行查询之后,通过遍历Cursor获取每张照片的ID和名称,可以根据ID构建照片的Uri,然后进行相应的操作。
使用MediaStore访问视频和音频
类似地,我们也可以使用MediaStore访问视频和音频文件。下面是一个使用MediaStore访问视频和音频的示例:
// 查询视频的Uri和字段
Uri videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] videoProjection = { MediaStore.Video.Media._ID, MediaStore.Video.Media.DISPLAY_NAME };
// 执行查询
Cursor videoCursor = contentResolver.query(videoUri, videoProjection, null, null, null);
// 遍历视频结果
if (videoCursor != null && videoCursor.moveToFirst()) {
do {
// 获取视频的ID和名称
long id = videoCursor.getLong(videoCursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
String name = videoCursor.getString(videoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME));
// 根据ID构建视频的Uri
Uri videoUri = ContentUris.withAppendedId(videoUri, id);
// 在此处进行视频的操作,例如播放、上传、编辑等
// ...
} while (videoCursor.moveToNext());
}
// 关闭Cursor
if (videoCursor != null) {
videoCursor.close();
}
// 查询音频的Uri和字段
Uri audioUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] audioProjection = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME };
// 执行查询
Cursor audioCursor = contentResolver.query(audioUri, audioProjection, null, null, null);
// 遍历音频结果
if (audioCursor != null && audioCursor.moveToFirst()) {
do {
// 获取音频的ID和名称
long id = audioCursor.getLong(audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
String name = audioCursor.getString(audio