2016-07-31 6 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'한 유형을 선언, 다음과 같이 변경합니다

enq=dm.enqueue(r); 
관련 문제