2016-07-31 2 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 в ваш код и запустить его с ури.

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' до тех пор, тип

enq=dm.enqueue(r); 
Смежные вопросы