android - 如何更正更新 Android .apk?
问题描述
Intent openIntent;
File file = new File(mApkPath);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
String auth = mContext.getPackageName() + ".file.provider";
Uri apkUri = FileProvider.getUriForFile(mContext, auth, file);
openIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
openIntent.setData(apkUri);
openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
openIntent = new Intent(Intent.ACTION_VIEW);
openIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
openIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
openIntent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
return openIntent;
我发现这种方式可以在低 SDK 版本的 Android 设备中打开一个表示“安装成功”的 Activity,但在高 SDK 版本中,安装完成后,即使安装了新的 .apk,应用程序也会崩溃。
有什么方法可以打开“安装成功”的活动,让用户可以选择安装“完成”或“打开”?
顺便说一句,resultCode == RESULT_CANCELED
实际上,我安装了新的 .apk。我注意到 PackageInstaller 可以用户更新 apk,但是如何使用它呢?我阅读了 ApiDemos 但result == PackageInstaller.STATUS_PENDING_USER_ACTION
通过了int result = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE)
,但 .apk 已安装并且没有任何“完成”或“打开”按钮。
谢谢!
解决方案
推荐阅读
- macos - Macos: ping: sendto: 套接字未连接
- r - 使用 ggplot2 geom_bar 是一种在 x 轴上对两个因子进行子集化并在其中分组对的方法?
- css - 在 React 中使用固定的 css 类自定义现有组件
- xaml - 十六进制代码中的 Alpha 通道在 99% 时仍然非常“透明”
- linux-kernel - 结合 uboot 和 Linux Kernel Image 部署到没有文件系统的目标设备
- dovecot - 圆形立方体无法连接到存储
- mongodb - 如何使用 mongodb 在查找中转换 toString
- python - 单元测试失败,无法找到全局模块
- php - 从 WordPress 菜单中隐藏 WooCommerce 空产品类别
- python - 如何测试用户是否可以注册并被重定向到主页?