2011-07-26 17 views
1

私は、ダウンロードが開始されたかどうかを検出し、ダウンロードされているファイルのURIを取得してからダウンロードをキャンセルするアプリケーションを作成していますダウンロードマネージャ私はこのURIを別の場所に送ることができるようにこれをやっています。AndroidのダウンロードマネージャからダウンロードしたファイルのネットワークURIを取得する方法

トラブルがダウンロードは、ダウンロードマネージャを照会することによって開始したときに、私が検出できるということですが、私は、ファイルのURLを

+1

私が使用したサンプルコードは、以下のとおりです:深刻なセキュリティ違反であるため、あなたがしようとしていることが不可能であることを願っています。 – CommonsWare

答えて

3

をダウンロードされて得ることができ、そこからダウンロードマネージャのメソッドや定数変数がありますあなた自身の質問に答えるその奇妙な、しかし、私は最終的にこれを行う方法を考え出しました。 android.appにはDownloadManagerクラスがあり、開始されたすべてのhttpダウンロードのリストとそのステータスが保存されています。これらは、ダウンロードが「実行中」、「保留中」、「一時停止中」などに基づいて除外できます。

このリストはカーソルに読み込むことができ、結果の列の1つはファイルがダウンロードされている場所のURLである 'COLUMN_URI'です。

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(); 
       } 
      } 
+0

幸運なことに、このテクニックは自分のプロセスからダウンロードする場合にのみ機能するようです。 – CommonsWare

関連する問題