Android Q

时间:2019-08-07 17:51:58

标签: android android-download-manager

在最近升级到API 29时,我的代码是

downloadManager.addCompletedDownload(downloadFilename,
    downloadFilename, true, saveInfo.mimeType,
    downloadPath, outputFile.length(), true)

…现在会产生弃用警告:

  

警告:'addCompletedDownload(String !, String !, Boolean,String !,   String !, Long,Boolean):不建议使用Long'。在Java中已弃用

DownloadManager.addCompletedDownload的API文档说:

  

此方法在API级别29中已弃用。   应用程序应该将文件贡献给MediaStore.Downloads集合,以使用户可以将它们作为下载的一部分使用。

但是,我无法找到有关MediaStore.Downloads应该如何精确替代的代码示例。 MediaStore.Downloads文档基本上不存在,并且MediaStore文档没有提供明显的指导。

任何人都可以为上述代码提供API 29兼容的替代品吗?

1 个答案:

答案 0 :(得分:3)

您必须更新MediaStore.Downloads集合。这样,您的文件将在Downloads文件夹中可见。在Android Q中,您不再需要更新DownloadManager,而需要更新MediaStore.Downloads集合。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    // You can add more columns.. Complete list of columns can be found at 
    // https://developer.android.com/reference/android/provider/MediaStore.Downloads
    ContentValues contentValues = new ContentValues();
    contentValues.put(MediaStore.Downloads.TITLE, /* FILE_NAME */);
    contentValues.put(MediaStore.Downloads.DISPLAY_NAME, /* DISPLAY NAME */);
    contentValues.put(MediaStore.Downloads.MIME_TYPE, /* MIME TYPE */);
    contentValues.put(MediaStore.Downloads.SIZE, /* FILE SIZE */);

    // If you downloaded to a specific folder inside "Downloads" folder
    contentValues.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + File.separator + "Temp");

    // Insert into the database
    ContentResolver database = getContentResolver();
    database.insert(Downloads.EXTERNAL_CONTENT_URI, contentValues);
} else {
    DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    if (downloadManager != null) {
        downloadManager.addCompletedDownload(downloadFilename, downloadFilename, true, 
                                  saveInfo.mimeType, downloadPath, outputFile.length(), true)
    }
}

注意以下差异

这是一小块盐,因为我还在检查以下几点:

1-不再显示通知。我想您现在有责任立即通知用户。

2-{{​​1}}集合仅接受“ / Downloads”文件夹下的文件。因此,这可能会影响下载位置。

要确认插入位置等,可以按以下步骤转储数据库:

MediaStore.Downloads