在进度搜索栏通知未显示在DownloadManager android中

时间:2017-08-02 10:14:39

标签: android android-notifications android-download-manager

我正在从webview下载文件。但是在使用DownloadManager时,它不会显示与this类似的正在进行的下载通知。它只是在后台操作。 下载过程中如何显示状态栏通知。 我能够获取下载的文件但是如何在通知中显示正在进行的过程?

我使用了“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。

1 个答案:

答案 0 :(得分: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