安装下载的apk

Posted

技术标签:

【中文标题】安装下载的apk【英文标题】:Install a downloaded apk 【发布时间】:2018-08-19 16:02:12 【问题描述】:

android 6.0.1 (API 23)

尝试将自动更新添加到我的应用程序并得到奇怪的东西:

    下载文件到

    val fileDownloaded = File(context.filesDir, "update.apk")
    

    然后尝试有意图地安装apk

    val intent = Intent(Intent.ACTION_VIEW, fileUri)
    intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
    intent.setDataAndType(fileUri, "application/vnd.android.package-archive")
    intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or 
            Intent.FLAG_ACTIVITY_NEW_TASK
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            startActivity(intent)
    

    清单的权限

     android.permission.INTERNET
     android.permission.WRITE_EXTERNAL_STORAGE
     android.permission.READ_EXTERNAL_STORAGE
     android.permission.REQUEST_INSTALL_PACKAGES
    

    出现错误“解析包时出现问题”和 logcat 消息:

无法打开“/data/user/0/com.testapp.android.demo/files/update.apk”:权限被拒绝 03-11 12:52:18.815 3330-3330/com.android.packageinstaller W/zipro:打开存档/data/user/0/com.testapp.android.demo/files/update.apk 时出错:I/O 错误 03-11 12:52:18.815 3330-3330/com.android.packageinstaller D/asset: 未能打开 Zip 存档 '/data/user/0/com.testapp.android.demo/files/update.apk' 03-11 12:52:18.815 3330-3330/com.android.packageinstaller W/PackageInstaller:解析清单时出现解析错误。停止安装

无法获得我必须拥有的权限...

在 android API >=24 上,通过 FileProvider,一切正常。问题只出在 api 较低的设备上

谁能告诉我哪里出了问题以及如何解决它。

【问题讨论】:

【参考方案1】:

您正在传递一个指向internal storage 的File。第三方应用程序(例如软件包安装程序)无权访问此位置。在旧设备上将 APK 下载到 external storage。

【讨论】:

非常感谢。有时一切都比看起来容易

以上是关于安装下载的apk的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机不能安装apk软件这是啥情况?安装的时候提示没有可用程序打开本文件

下载更新文件后,调用安装器自动安装apk文件

安装下载的apk

Android项目实战(三十一):异步下载apk文件并安装(非静默安装)

下载安装APK

android怎么获取刚刚下载安装的APK的APP名字和图片