【发布时间】:2016-11-14 08:52:14
【问题描述】:
当使用版本 24 的构建工具和带有 N 映像 (npd56n) 的 Android 设备时,我无法使用 PackageManager#installPackage 安装包。
当带有file: 方案的URI 传递给方法时,返回-3,我假设它是INSTALL_FAILED_INVALID_URI。
当使用 FileProvider(content: 方案)创建的 URI 传递给方法时,抛出异常:
Caused by: java.lang.UnsupportedOperationException: Only file:// URIs are supported
有什么想法吗?
【问题讨论】:
-
FileProvider方法对我很有效,从 NDP4 开始使用ACTION_INSTALL_PACKAGE。请参阅this issue 了解更多信息。 -
@CommonsWare,Android N PackageManager source 似乎仍然明确禁止非
file://URI。FileProvider提供content://URI。也许您指的是通过Intent安装而不是通过(反射)调用PackageManager.installPackage? -
@manyobject:哦,我以为
installPackage()只是调用安装程序活动的方便包装器。是的,我正在使用ACTION_INSTALL_PACKAGE进行测试。 -
@mrtowel,我强烈怀疑在您的情况下 -3 返回值是因为 PackageManager 没有读取您尝试安装的文件的权限。 Changes in Android N 意味着文件权限更加严格,特别是
File#setReadable(true, false)不再足以使应用程序私有存储中的文件对其他应用程序可读,MODE_WORLD_READABLE将抛出异常。
标签: android android-package-managers android-fileprovider android-7.0-nougat