我正在編寫一個應用程序,其中我想檢測下載是否已啓動並檢索正在下載的文件的URI,然後取消下載下載管理器。我正在這樣做,以便我可以將此URI發送到其他地方。如何從Android下載管理器下載文件的網絡uri
麻煩的是,當下載通過查詢下載管理器開始我可以檢測,但有下載
我正在編寫一個應用程序,其中我想檢測下載是否已啓動並檢索正在下載的文件的URI,然後取消下載下載管理器。我正在這樣做,以便我可以將此URI發送到其他地方。如何從Android下載管理器下載文件的網絡uri
麻煩的是,當下載通過查詢下載管理器開始我可以檢測,但有下載
的方法或在下載管理器中的常量變量從中我也能獲得文件的URL確定它的怪異回答你自己的問題,但我終於想出瞭如何做到這一點。 android.app中有一個DownloadManager類,它存儲所有啓動的http下載列表及其狀態。這些可以根據下載是「正在運行」,「正在等待」,「已暫停」等過濾掉。
該列表可以讀入遊標,結果的其中一列是'COLUMN_URI',它是正在下載文件的URL。在那裏我已經用它的樣本代碼,如下所示:
public void readDownloadManager() {
DownloadManager.Query query = null;
DownloadManager downloadManager = null;
Cursor c = null;
try {
query = new DownloadManager.Query();
downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
//Just for testing I initiated my own download from this url. When an http
// reuest for this url is made, since download is taking place, it gets saved in
// the download manager.
Request request = new Request(Uri.parse("http://ocw.mit.edu/courses" +
"/aeronautics-and-astronautics/16-100-aerodynamics-fall-2005" +
"/lecture-notes/16100lectre1_kvm.pdf"));
downloadManager.enqueue(request);
query.setFilterByStatus(DownloadManager.STATUS_PENDING);
c = downloadManager.query(query);
if(true){
int statusColumnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
int urlColumnIndex = c.getColumnIndex(DownloadManager.COLUMN_URI);
long downloadProcessIdColumnNo = c.getColumnIndex(DownloadManager.COLUMN_ID);
Log.d("Column Count", ((Integer)c.getCount()).toString());
if(c.getCount() > 0){
String url="";
c.moveToLast();
if(c.isLast()){
url = c.getString(urlColumnIndex);
downloadManager.remove(downloadProcessIdColumnNo);
Log.d("Count after remove", ((Integer)c.getCount()).toString());
}
Log.d("After", "Stopped Working");
//Here I am sending the url to another activity, where I can work with it.
Intent intent = new Intent(EasyUploadMainMenu.this, EasyUploadActivity.class);
Bundle b = new Bundle();
b.putString("url", url);
intent.putExtras(b);
startActivity(intent);
Log.d("url:", url);
}
}
} catch (NullPointerException ex) {
ex.printStackTrace();
}
}
幸運的是,這項技術似乎只適用於您自己的流程下載。 – CommonsWare
我當然希望你所要做的是不可能的,因爲這將是一個嚴重的安全漏洞。 – CommonsWare