无法访问DownloadManager';s在Android N上下载的文件

无法访问DownloadManager';s在Android N上下载的文件,android,android-download-manager,android-package-managers,android-7.0-nougat,Android,Android Download Manager,Android Package Managers,Android 7.0 Nougat,我有一个具有所有必要权限的系统应用程序。以前,我会使用DownloadManager下载apk,然后通过PackageManager的installPackage()使用反射来安装所述apk 不幸的是,随着N的行为改变 : DownloadManager不能再按文件名共享私人存储的文件。访问列\本地\文件名时,传统应用程序可能会以不可访问的路径结束。针对Android N或更高版本的应用程序在尝试访问列\u LOCAL\u FILENAME时会触发SecurityException。通过使用Se

我有一个具有所有必要权限的系统应用程序。以前,我会使用DownloadManager下载apk,然后通过PackageManager的installPackage()使用反射来安装所述apk

不幸的是,随着N的行为改变 :

DownloadManager不能再按文件名共享私人存储的文件。访问列\本地\文件名时,传统应用程序可能会以不可访问的路径结束。针对Android N或更高版本的应用程序在尝试访问列\u LOCAL\u FILENAME时会触发SecurityException。通过使用SetDestinationNexternalFilesDir(上下文、字符串、字符串)或SetDestinationNexternalPublicDir(字符串、字符串)将下载位置设置为公共位置的旧式应用程序仍然可以访问列_LOCAL_FILENAME中的路径,但是强烈建议使用此方法。访问DownloadManager公开的文件的首选方法是使用openFileDescriptor(Uri,字符串)

我现在在以旧方式尝试时遇到一个被拒绝权限的错误


我需要一个Uri来传递给PM的installPackage(),因此我目前只需使用(已取消加密的)WORLD_可读模式将文件复制到我的应用程序的私有文件夹中,以便PM以后可以访问并安装。这让人感觉很不舒服,我想知道是否有人知道更好的方法(androiddev建议的另一个选项是将文件下载到公共目录,但这需要我添加写入外部存储权限,这不是一个选项。)

为什么要使用
DownloadManager
?自己下载APK文件。对于
Uri
,请使用
FileProvider
@commonware我需要下载管理器,主要是为了它的重试机制。