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