【问题标题】:PackageManager#installPackage doesn't work for Android NPackageManager#installPackage 不适用于 Android N
【发布时间】: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


【解决方案1】:

PackageManager 中的 installPackage 在 N 上已弃用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 2017-07-10
    • 2013-03-15
    相关资源
    最近更新 更多