代码之家  ›  专栏  ›  技术社区  ›  Shadow

DownloadManager android中未显示On progress seekbar通知

  •  5
  • Shadow  · 技术社区  · 7 年前

    我正在从webview下载文件。但它不会显示正在进行的下载通知,类似于 this 我可以获得下载的文件,但如何在通知中显示正在进行的过程?

    这是我使用的代码。

    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
                        }
                    }
                }
            }
        };
    

    我查了安卓7.1.1。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Shadow    7 年前

    是的,我找到了解决办法。问题是没有启用下载管理器。

    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