2016-07-31 8 views
3

ウェブ上のファイルへのリンクがあるアプリがあります。私は、ユーザーがデバイスにファイルをダウンロードすることを選択した後、そのファイルを自動的に開きたいと思っています。 これは、ダウンロードするための私のコードです:Androidでダウンロードした後にダウンロードしたファイルを開く

private void downloadFile(String url) { 

     if (GeneralHelper.isNetworkAvailable(this)) { 
      Uri uri = Uri.parse(url); 
      DownloadManager.Request r = new DownloadManager.Request(uri); 

      String fileName = url.substring(url.lastIndexOf('/')+ 1, url.length()); 

      // This put the download in the same Download dir the browser uses 
      r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); 
      r.allowScanningByMediaScanner(); 

      // Notify user when download is completed 
      // (Seems to be available since Honeycomb only) 
      r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 

      // Start download 
      DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
      dm.enqueue(r); 

     } 
     else { 
      // .... 
     } 

    } 

ダウンロードが行われた後、私は、ファイルを開くためのコードを追加することができますどのように?

+1

http://blog.vogella.com/2011/06/14/android-downloadmanager -example/ これはうまくいきます。 – srijanshukla

答えて

7

このBroadcastReceiverをコードに追加し、uriを起動して実行します。あなたがダウンロードを開始すると

BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
       long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
       DownloadManager.Query query = new DownloadManager.Query(); 
       query.setFilterById(enq); 
       downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); 
       Cursor c = downloadManager.query(query); 
       if (c.moveToFirst()) { 
        int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS); 
        if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) { 
         String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 
         //TODO : Use this local uri and launch intent to open file 

        } 
       } 
      } 
     } 
    }; 
    registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

、 'ENQ' としてlong型を宣言し、以下の変更を行い

enq=dm.enqueue(r); 
関連する問題