5

我正在從webview下載文件。但是當使用DownloadManager時,它不會顯示類似於this的正在進行的下載通知。它只是在後臺運行。 如何在下載過程中顯示狀態欄通知。 我可以獲取下載的文件,但是如何顯示正在進行的通知過程?在進度seekbar通知沒有顯示在DownloadManager android

我用「request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);」但它不顯示正在進行的過程。請指導我我在做什麼錯誤。

這是我使用的代碼。

mWebview.setDownloadListener(new DownloadListener() { 
      @Override 
      public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { 
       DownloadManager.Request request = new DownloadManager.Request(
         Uri.parse(url)); 
       request.setMimeType("pdf"); 


       String cookies = CookieManager.getInstance().getCookie(url); 


       request.addRequestHeader("cookie", cookies); 


       request.addRequestHeader("User-Agent", userAgent); 


       request.setDescription("Downloading file..."); 


       request.setTitle(URLUtil.guessFileName(url, contentDisposition, 
         "pdf")); 


       request.allowScanningByMediaScanner(); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     //clueless why it's not working..  
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); 
       } else { 
        request.setShowRunningNotification(true); 
       } 

       //request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
       request.setDestinationInExternalPublicDir(
         Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(
           url, contentDisposition, "pdf")); 
       dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
       downloadReference = dm.enqueue(request); 
       IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); 
       registerReceiver(downloadReceiver, filter); 
      } 
     }); 
    } 

    private BroadcastReceiver downloadReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 
      if (downloadReference == referenceId) { 
       DownloadManager.Query q = new DownloadManager.Query(); 
       q.setFilterById(intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1)); 
       Cursor c = dm.query(q); 

       if (c.moveToFirst()) { 
        int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); 
        if (status == DownloadManager.STATUS_SUCCESSFUL) { 
         // process download 
         String title = c.getString(c.getColumnIndex(DownloadManager.COLUMN_TITLE)); 
         File file = new File(Environment.getExternalStorageDirectory() 
           + "/Download/" + title);//name here is the name of any string you want to pass to the method 
         if (!file.isDirectory()) 
          file.mkdir(); 
         //Intent testIntent = new Intent("com.adobe.reader"); 
         Intent testIntent = new Intent(Intent.ACTION_VIEW); 
         testIntent.setType("application/pdf"); 
         //testIntent.setAction(Intent.ACTION_VIEW); 
         Uri uri = Uri.fromFile(file); 
         testIntent.setDataAndType(uri, "application/pdf"); 
         try { 
          startActivity(testIntent); 
         } catch (ActivityNotFoundException e) { 
          Toast.makeText(MainActivity.this, "No application available to view PDF", 
            Toast.LENGTH_SHORT).show(); 
         } 
         // get other required data by changing the constant passed to getColumnIndex 
        } 
       } 
      } 
     } 
    }; 

我檢查了Android 7.1.1。

+0

請告訴我的文件您嘗試下載的大小? – Mani

+0

文件大小爲1Mb @Mani – Shadow

+0

你可以嘗試1GB的文件大小,並確認仍然通知不顯示!我的可疑是因爲文件大小1MB可能是一個它已經下載的機會 – Mani

回答

2

是的,我找到了解決方案。問題是沒有啓用下載管理器。

Go to the Settings > App 
In the options click 'Show System Apps' 
Find 'Download Manager' and open it 
Click 'Notifications' under App Settings 
Switch on Allow Notifications 

參考:

https://stackoverflow.com/a/43841708/1921263