我正在尝试使用 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
。

斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
回答我自己的问题
最好
downloadOnly()
按照 Elli White here的建议使用。但是我在研究这个问题上浪费了足够多的时间,并且得到了一个可行的解决方案,所以我决定不从头开始。我得到的错误是因为 Glide 返回的图像文件名。
我通过将文件复制到某处并将其用作源来修复它。
val file = asyncTask.get()
// copy file
val tempFile = File.createTempFile("image", ".png")
copyFile(file!!.inputStream(), FileOutputStream(tempFile))
对于我的用例,即将图像设置为墙纸,我不必担心文件扩展名,只要我.png在这种情况下指定它是图像即可。
添加回答
举报
0/150
提交
取消