最近开发遇到了个问题,app升级的时候,其他手机都能正常升级,下载完安装包,跳到安装页面进行新版本的安装。但却有用户反映,华为P10和华为Mate 9升级时,怎么也无法跳转到安装页面。起初我以为是华为手机自身系统的问题(因为手上的华为测试机都是正常的),还特地对比了几种配置的华为手机,最后发现,是Android 8.0系统版本的锅,不是手机的问题。

2017年8月22日,Google发布了Android 8.0的正式版,其正式名称为:Android Oreo(奥利奥),Android 8.0强化了权限管理,变得更加安全。在Android 8.0以前,所有的未知来源应用都可以被安装,或者会弹窗给用户一个提示,如此设计虽然方便,但是若被引诱安装了恶意软件,安装"未知来源"的应用有可能会对手机系统带来潜在的危害;

而在Android 8.0的系统中,**未知来源应用权限**的开关被移除掉了,取而代之的是未知来源应用的管理列表,如果你想要安装某个被自己所信任的开发者的app,则需要在每一次都手动授权"安装未知应用"的许可。设置页面如下图:(在华为Android 8.0中,打开该设置页面:设置列表—>安全与隐私—>更多安全设置—>安装未知应用)

如图所示,若某个应用选择的是“不允许”,那么假设app手动升级的时候,就无法成功跳转到安装页面进行正常的App升级流程了,此时需要手动去授权才行,但是很多用户并不知道需要这么设置。
废话说了一大堆,解决其实很简单。

1.在AndroidManifest.xml文件中,添加REQUEST_INSTALL_PACKAGES权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

2.在打开安装包的代码中添加**兼容Android 8.0**的代码。

 /*** 打开安装包** @param mContext* @param fileUri*/public void openAPKFile(Activity mContext, String fileUri) {DataEmbeddingUtil.dataEmbeddingAPPUpdate(fileUri);// 核心是下面几句代码if (null != fileUri) {try {Intent intent = new Intent(Intent.ACTION_VIEW);File apkFile = new File(fileUri);//兼容7.0if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);Uri contentUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileProvider", apkFile);intent.setDataAndType(contentUri, "application/vnd.android.package-archive");//兼容8.0if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();if (!hasInstallPermission) {ToastUtil.makeText(MyApplication.getContext(), MyApplication.getContext().getString(R.string.string_install_unknow_apk_note), false);startInstallPermissionSettingActivity();return;}}} else {intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);}if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {mContext.startActivity(intent);}} catch (Throwable e) {e.printStackTrace();DataEmbeddingUtil.dataEmbeddingAPPUpdate(e.toString());CommonUtils.makeEventToast(MyApplication.getContext(), MyApplication.getContext().getString(R.string.download_hint), false);}}}/*** 跳转到设置-允许安装未知来源-页面*/@RequiresApi(api = Build.VERSION_CODES.O)private void startInstallPermissionSettingActivity() {//注意这个是8.0新APIIntent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(intent);}

版本升级不跳转应用安装页面相关推荐

  1. app版本更新 下载apk后没有跳转到安装页面

    app版本更新 下载apk后没有跳转到安装页面 如果遇到这种情况,可以试试下面的两种方法 1.添加请求安装app的权限 <uses-permission android:name="a ...

  2. android动态添加的页面怎么加功能_Android跳转应用安装页面

    一.低版本跳转方式 Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(uri,"application ...

  3. php未登录跳到登陆页面,vue实现未登录跳转到登录页面的方法

    环境:vue 2.9.3; webpack;vue-router 目的:实现未登录跳转 例子:直接在url地址栏输入...../home,但是这个页面要求需要登陆之后才能进入,判断的值就通过登陆之后给 ...

  4. html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面

    一.编写Filter拦截器类 package com.pv.utils; import java.io.IOException; import java.io.PrintWriter; import ...

  5. 解决CentOS7(无限登录)登录后又跳转到登录页面的问题

    问题:最近在Linux系统中部署完JavaEE开发环境后,重启系统后发现登录不上去了Linux系统了,输完密码回车后又跳转到登录页面 原因:在/ect/profile 文件中添加的PATH方式有问题 ...

  6. 浏览器打开时自动跳转到搜狗页面

    原因 因为在第三方网站下载了流氓软件,安装时给我所有的浏览器都修改成打开时自动跳转到搜狗页面 解决 拿edge举例 打开edge所在位置 右键edge,属性 在快捷方式页面中删除目标项的后缀网址 在常 ...

  7. (APP入门)Android Studio照相保存并跳到另一个页面

    功能是很简单的功能,主要是想记录一下毫无java基础要怎么写APP. 作为一个光电人,本人的程序设计基础停留在大学的C语言.但学业需要还是捡起了APP编写,由于时间比较紧,是没有学java直接开始AS ...

  8. h5 跳转上个页面刷新_H5实现页面内跳转页面

    W3School.com.cn 注释:由于链接的目标匹配 iframe 的名称,所以链接会在 iframe 中打开. 原文来源:http://www.w3school.com.cn JS实现页面内跳转 ...

  9. 通过cookies跳过验证码登陆页面,直接访问网站的其它URL

    我每次手动访问去NN网的一家酒店,就不需要登陆,一旦我用脚本打开就会让我登陆,而登陆页面又有验证码,不想识别验证码,所以就想:"通过cookies跳过验证码登陆页面,直接访问网站的其它URL ...

最新文章

  1. 组播路由协议基础——组播分发树
  2. Python startswith() 方法
  3. 一条简单的 SQL 执行超过1000ms,纳尼?
  4. (转)Python 用hashlib求中文字符串的MD5值
  5. python集合类型中的元素是有序的_Python基础-2-变量和数据类型(2)-列表、元组、字典、集合...
  6. 计算机网络之传输层:5、TCP可靠传输
  7. SearchParams(URL获取参数)
  8. html基本结构(头部需加上样式表),HTML基本结构、头部、注释(示例代码)
  9. 刚刚,贝佐斯宣布将辞任亚马逊 CEO 一职!
  10. 学计算机的学期计划书,学习计划表
  11. Android 所遇问题(一)
  12. inode客户端linux 怎样运行,H3C_iNode智能客户端安装指导(Linux)
  13. 基于java的健康管理平台设计与实现(含源文件)
  14. Ae:时间轴面板(图层控制区)
  15. TensorFlow中图(graphs)概念
  16. 什么是UI设计,深入了解UI
  17. 有限元剖网格之Gmsh安装与使用入门
  18. IDEA中报错:java: -source 1.5 中不支持静态接口方法调用
  19. 有利可图网_公布有利可图的辅助项目手册
  20. [知识图谱] 4.1-知识图谱在金融领域中的应用实践

热门文章

  1. 文案怎么写,为什么写不出好的文案
  2. Github项目分享——hello-algorithm
  3. 艾默生充电桩15kw模块+台达三相PFC源程序
  4. 文本聚类分析算法_文本自动分类——分类算法KNN(K最邻近)应用(一)
  5. 免堆期由谁申请_Alan Logistics摘录:知识贴| 关于免箱期和免堆期
  6. 企业微信H5网页费用报销操作界面 Vue
  7. Imagex用法实例
  8. 最近装了太新电脑,真太爽了。
  9. 玩 Lin UI 搞小程序之:用步骤条组件做个时间简史
  10. python flask使用jsonify问题处理