一个新的测试机在自动下载升级安装更新版本APP时,报出“解析程序包时出现问题”错误。原因众说纷纭, 一番搜索,下面的回答比较全面:
https://stackoverflow.com/questions/39147608/android-install-apk-with-intent-view-action-not-working-with-file-provider
简单总结:
1. 安卓7以下一般问题不大
2. 安卓7及以上需要使用FileProvider
3. 安卓7.1 需要在清单中增加 REQUEST_INSTALL_PACKAGES 权限
4. 安卓8 需要授权允许应用安装未知应用,在应用权限中设置。(此次问题)
另,
1. 注意检查是否有外存储器的读写权限, 如果没有就无法正常下载程序。
2. 应用权限是否被允许"安装未知应用",可以如下这样判断, 坑:但targetSdkVersion需要至少为26,否则下面的方法永远返回false;
this.getPackageManager().canRequestPackageInstalls()
判断后可以帮助用户跳转到设置页面引导用户设置,也可以让用户自行通过系统设置的应用权限管理设置。
Intent unknownAppSourceIntent = new Intent() .setAction(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES) .setData(Uri.parse(String.format("package:%s",MainOneActivity.this.getPackageName()))); startActivityForResult(unknownAppSourceIntent, UNKNOWN_APP_INSTALL);
一些定制android系统高于安卓8不进行步骤四,也是可以安装的,而有些则不可以。 唉,安卓的碎片化~。。。