我正在嘗試使用 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
提交
取消