为了账号安全,请及时绑定邮箱和手机立即绑定

Glide 下载图片并同步保存为文件

Glide 下载图片并同步保存为文件

呼如林 2023-03-23 16:44:12
我正在尝试使用 Glide 从 URL 下载图像并获取文件的路径并将其转发以WallpaperManager.getCropAndSetWallpaperIntent设置为墙纸。我发现这可以使用asFileGlide 的方法来完成科特林:val data = Glide    .with(context)    .asFile()    .load(url)    .submit()但是当我打电话时data.get()我得到了错误java.lang.IllegalArgumentException: You must call this method on a background thread所以遵循这个答案并实施MyAsyncTaskinterface AsyncResponse {    fun processFinish(output: File?)}class MyAsyncTask(delegate: AsyncResponse) : AsyncTask<FutureTarget<File>, Void, File?>() {    override fun doInBackground(vararg p0: FutureTarget<File>?): File? {        return p0[0]?.get()    }    private var delegate: AsyncResponse? = null    init {        this.delegate = delegate    }    override fun onPostExecute(result: File?) {        delegate!!.processFinish(result)    }}而我现在正在这样做fun getFile(context: Context, url: String) : File {    val data = Glide        .with(context)        .asFile()        .load(url)        .submit()    val asyncTask = MyAsyncTask(object : AsyncResponse {        override fun processFinish(output: File?) {            println(output?.path)        }    }).execute(data)  return asyncTask.get()}但我似乎无法得到File
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

关于您关于从 url 获取图像的第一个问题,而不是使用asFile,建议您使用该方法downloadOnly()AsyncTask然后,您可以利用 aRequestListener在加载资源时获取异步回调,而不是使用 an 。

至于你的第二个问题,你正在广播一个未被操作系统或你设备上的任何应用程序注册的隐式意图。您可以尝试利用系统服务,而不是广播意图WallpaperManager


查看完整回答
反对 回复 2023-03-23
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

回答我自己的问题

  1. 最好downloadOnly()按照 Elli White here的建议使用。但是我在研究这个问题上浪费了足够多的时间,并且得到了一个可行的解决方案,所以我决定不从头开始。

  2. 我得到的错误是因为 Glide 返回的图像文件名。

我通过将文件复制到某处并将其用作源来修复它。

        val file = asyncTask.get()

//        copy file

        val tempFile = File.createTempFile("image", ".png")

        copyFile(file!!.inputStream(), FileOutputStream(tempFile))


对于我的用例,即将图像设置为墙纸,我不必担心文件扩展名,只要我.png在这种情况下指定它是图像即可。


查看完整回答
反对 回复 2023-03-23
  • 2 回答
  • 0 关注
  • 502 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号