Java 为什么DownloadManager.Request是;allowScanningByMediaScanner();不在安卓Q上工作?

Java 为什么DownloadManager.Request是;allowScanningByMediaScanner();不在安卓Q上工作?,java,android,android-10.0,Java,Android,Android 10.0,下面的code适用于Q以下的任何Android版本。但当我在AndroidQ上测试它时,它不起作用。视频文件已下载并可播放。问题在于媒体扫描仪 private void downloadVideo(String url, String videoPath) { try { File file = new File(videoPath); DownloadManager.Request request = new DownloadM

下面的
code
适用于Q以下的任何
Android
版本。但当我在
Android
Q上测试它时,它不起作用。视频文件已下载并可播放。问题在于
媒体扫描仪

private void downloadVideo(String url, String videoPath) {
        try {
            File file = new File(videoPath);

            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url))
                    .setTitle(videoType.name() + " Video")
                    .setDescription("")
                    .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                    .setDestinationUri(Uri.fromFile(file))
                    .setAllowedOverMetered(true)
                    .setAllowedOverRoaming(true);

            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, Uri.fromFile(file).getLastPathSegment());
            request.allowScanningByMediaScanner();

            DownloadManager downloadManager = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
            downloadManager.enqueue(request);

            Toast.makeText(this, "Download started. Check notification bar for progress.", Toast.LENGTH_SHORT).show();
        } catch (Exception ex) {
            ex.printStackTrace();
            Toast.makeText(this, "Unable to download video", Toast.LENGTH_SHORT).show();
        }
    }

这是行不通的,因为Android Q中不推荐使用这种方法

您可以在官方文档中找到注释:

从Q开始,忽略此值。MediaScanner不会扫描下载到应用程序拥有的目录中的文件(例如,Context#getExternalFilesDir(String)),其余文件将被扫描


来源:

你好。什么是解决方法?你有什么解决方法吗?用什么来代替?是的,有一个解决方案伴随着这个答案会很好。你不需要用任何东西来代替。只需确保您没有将文件下载到应用程序拥有的目录中。正如摘录中所说,我提供的应用程序目录以外的文件将由MediaScanner扫描,无需任何额外调用。@VolodymyrBuberenko MediaScanner不在API 29中工作。可能是用重启手机扫描的。