gpt4 book ai didi

android - 如何在下载成功或失败之前接收下载管理器 Intent 的状态

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:53 25 4
gpt4 key购买 nike

这是我的问题。我正在尝试通过 Asynctask 使用下载管理器 Intent 从我的服务器下载文件。在我的 asynctask 类的 doInBackground 中,我调用了下载管理器 Intent ,并且 doinBackground 将在下载完成(成功或失败)时返回 bool 值。这是我的代码

  protected Boolean doInBackground(String... f_url) {
boolean flag = true;
boolean downloading =true;
try{
DownloadManager mManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
Request mRqRequest = new Request(
Uri.parse("http://"+model.getDownloadURL()));
long idDownLoad=mManager.enqueue(mRqRequest);
DownloadManager.Query query = null;
query = new DownloadManager.Query();
Cursor c = null;
if(query!=null) {
query.setFilterByStatus(DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PAUSED|DownloadManager.STATUS_SUCCESSFUL|
DownloadManager.STATUS_RUNNING|DownloadManager.STATUS_PENDING);
} else {
return flag;
}
c = mManager.query(query);
if(c.moveToFirst()) {
int status =c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));


while (downloading)
{ Log.i ("FLAG","Downloading");
if (status==DownloadManager.STATUS_SUCCESSFUL)
{ Log.i ("FLAG","done");
downloading = false;
flag=true;
break;
}
if (status==DownloadManager.STATUS_FAILED)
{Log.i ("FLAG","Fail");
downloading = false;
flag=false;
break;
}
c.moveToFirst();
}
}
return flag;
}
catch (Exception e)
{
flag = false;
return flag;
}
}

但 DownloadManager 状态永远不会跳到 DownloadManager.STATUS_SUCCESSFUL 或 DownloadManager.STATUS_FAILED。

最佳答案

不需要 AsyncTask 或同步查询。 DownloadManager 已经是异步的。您应该为 ACTION_DOWNLOAD_COMPLETE 注册一个 BroadcastReceiver,以便在下载完成(或失败)时收到通知。

http://blog.vogella.com/2011/06/14/android-downloadmanager-example 有一个很好的例子

关于android - 如何在下载成功或失败之前接收下载管理器 Intent 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26210048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com