您好,我看到您的博客,android11保存相册和视频到相册,觉得很好,很厉害,但是还有一个问题就是,android 11及以上保存gif到相册,以及如何保存音频到本地啊,我看您的博客文章只有保存视频和图片。麻烦您了
11条回答 默认 最新
树莓大王 2023-06-27 10:57关注获得1.05元问题酬金 在 Android 11 及以上版本,为了加强隐私保护,对应用访问外部存储进行了限制。可以通过 MediaStore API 来保存图片、视频和音频文件到相册或本地。
保存 GIF 到相册:
val resolver: ContentResolver = context.contentResolver val imageCollection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) val imageDetails = ContentValues().apply { put(MediaStore.Images.Media.DISPLAY_NAME, "my_gif.gif") put(MediaStore.Images.Media.MIME_TYPE, "image/gif") put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM) } val imageUri = resolver.insert(imageCollection, imageDetails) val outputStream = resolver.openOutputStream(imageUri!!) outputStream?.let { // 将 gif 字节数组写入 outputStream it.write(gifBytes) it.close() }保存音频到本地:
val resolver: ContentResolver = context.contentResolver val audioCollection = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) val audioDetails = ContentValues().apply { put(MediaStore.Audio.Media.DISPLAY_NAME, "my_audio.mp3") put(MediaStore.Audio.Media.MIME_TYPE, "audio/mpeg") put(MediaStore.Audio.Media.RELATIVE_PATH, Environment.DIRECTORY_MUSIC) } val audioUri = resolver.insert(audioCollection, audioDetails) val outputStream = resolver.openOutputStream(audioUri!!) outputStream?.let { // 将音频字节数组写入 outputStream it.write(audioBytes) it.close() }需要注意的是,保存文件到相册或本地时,需要在 AndroidManifest.xml 文件中添加对应的权限声明,例如:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />另外,Android 10 及以上版本还需要在代码中动态请求权限,才能访问外部存储。
解决 无用评论 打赏 举报