这是我的问题.
我正试图通过Asynctask使用下载管理器意图从我的服务器下载文件.
在asinctask类的doInBackground中,我调用了下载管理器intent,doinBackground将在下载完成时返回布尔值(成功或失败).
这是我的代码
我正试图通过Asynctask使用下载管理器意图从我的服务器下载文件.
在asinctask类的doInBackground中,我调用了下载管理器intent,doinBackground将在下载完成时返回布尔值(成功或失败).
这是我的代码
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.
对我有什么帮助吗?
解决方法
您必须重新查询下载管理器.即使数据发生变化,光标也保持不变.试试这样:
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; } while (downloading) { c = mManager.query(query); if(c.moveToFirst()) { Log.i ("FLAG","Downloading"); int status =c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); 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; } } } return flag; }catch (Exception e) { flag = false; return flag; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。