首页 > 解决方案 > 在设备上下载 GIF 时出现异常

问题描述

我像这样用 Glide 下载 GIF

Glide.with(this).asFile().load(contentURL)
            .listener(object: RequestListener<File>{
                override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<File>?, isFirstResource: Boolean): Boolean {

                    return false
                }

                override fun onResourceReady(resource: File?, model: Any?, target: Target<File>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
                    Log.d("TEST", getGifUri(resource?.absolutePath, resource?.name).toString())
                    return false
                }

            })
            .submit()

在 getGifUri 函数中:

private fun getGifUri(filePath: String?, fileName: String?): Uri{

        val values = ContentValues().apply {
            put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
            put(MediaStore.MediaColumns.MIME_TYPE, "image/gif")
            put(MediaStore.MediaColumns.DATA, filePath)
        }

        return this.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)!!
    }

当我在模拟器上执行此操作时,一切都很好并且很有趣返回 uri

内容://媒体/外部/图像/媒体/61

但是当我尝试在设备上执行此操作时,我有一个例外:

com.bumptech.glide.load.engine.CallbackException: Unexpected exception thrown by non-Glide code

 Caused by: java.lang.IllegalArgumentException: Requested path /data/data/com.sasmobile.fonts_android/cache/image_manager_disk_cache/c3766c85acb9155ff2a8856e8cf9d772f6f86f316926923e605da8c0a7083738.0 doesn't appear under [/storage/emulated/0]

标签: androidkotlin

解决方案


推荐阅读