NeverSettle_ 2023-06-27 10:33 采纳率: 0%
浏览 75
已结题

android 11及保存gif以及音频到本地

您好,我看到您的博客,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 及以上版本还需要在代码中动态请求权限,才能访问外部存储。

    评论

报告相同问题?

问题事件

  • 系统已结题 7月5日
  • 创建了问题 6月27日