首页 > 解决方案 > 尝试以编程方式安装 APK 时出错

问题描述

之后,我下载后安装 apk 的代码是:

var downloadIntent: Intent;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    val apkFile = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "update.apk")
    val contentUri = FileProvider.getUriForFile(appContext, "${activity?.packageName}.fileprovider", apkFile)
    downloadIntent = Intent(Intent.ACTION_INSTALL_PACKAGE)
    downloadIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    downloadIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    downloadIntent.setDataAndType(contentUri, "application/vnd.android.package-archive")
}
appContext.startActivity(downloadIntent);

这是清单:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
...
 <provider
            android:authorities="${applicationId}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true"
            android:name="androidx.core.content.FileProvider">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
        </provider>

结果是包安装程序静默停止。

标签: androidkotlinandroid-fileprovider

解决方案


感谢@Selvin,标志必须像这样设置:

downloadIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION

推荐阅读