版本升级不跳转应用安装页面
最近开发遇到了个问题,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);}
版本升级不跳转应用安装页面相关推荐
- app版本更新 下载apk后没有跳转到安装页面
app版本更新 下载apk后没有跳转到安装页面 如果遇到这种情况,可以试试下面的两种方法 1.添加请求安装app的权限 <uses-permission android:name="a ...
- android动态添加的页面怎么加功能_Android跳转应用安装页面
一.低版本跳转方式 Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(uri,"application ...
- php未登录跳到登陆页面,vue实现未登录跳转到登录页面的方法
环境:vue 2.9.3; webpack;vue-router 目的:实现未登录跳转 例子:直接在url地址栏输入...../home,但是这个页面要求需要登陆之后才能进入,判断的值就通过登陆之后给 ...
- html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面
一.编写Filter拦截器类 package com.pv.utils; import java.io.IOException; import java.io.PrintWriter; import ...
- 解决CentOS7(无限登录)登录后又跳转到登录页面的问题
问题:最近在Linux系统中部署完JavaEE开发环境后,重启系统后发现登录不上去了Linux系统了,输完密码回车后又跳转到登录页面 原因:在/ect/profile 文件中添加的PATH方式有问题 ...
- 浏览器打开时自动跳转到搜狗页面
原因 因为在第三方网站下载了流氓软件,安装时给我所有的浏览器都修改成打开时自动跳转到搜狗页面 解决 拿edge举例 打开edge所在位置 右键edge,属性 在快捷方式页面中删除目标项的后缀网址 在常 ...
- (APP入门)Android Studio照相保存并跳到另一个页面
功能是很简单的功能,主要是想记录一下毫无java基础要怎么写APP. 作为一个光电人,本人的程序设计基础停留在大学的C语言.但学业需要还是捡起了APP编写,由于时间比较紧,是没有学java直接开始AS ...
- h5 跳转上个页面刷新_H5实现页面内跳转页面
W3School.com.cn 注释:由于链接的目标匹配 iframe 的名称,所以链接会在 iframe 中打开. 原文来源:http://www.w3school.com.cn JS实现页面内跳转 ...
- 通过cookies跳过验证码登陆页面,直接访问网站的其它URL
我每次手动访问去NN网的一家酒店,就不需要登陆,一旦我用脚本打开就会让我登陆,而登陆页面又有验证码,不想识别验证码,所以就想:"通过cookies跳过验证码登陆页面,直接访问网站的其它URL ...
最新文章
- 组播路由协议基础——组播分发树
- Python startswith() 方法
- 一条简单的 SQL 执行超过1000ms,纳尼?
- (转)Python 用hashlib求中文字符串的MD5值
- python集合类型中的元素是有序的_Python基础-2-变量和数据类型(2)-列表、元组、字典、集合...
- 计算机网络之传输层:5、TCP可靠传输
- SearchParams(URL获取参数)
- html基本结构(头部需加上样式表),HTML基本结构、头部、注释(示例代码)
- 刚刚,贝佐斯宣布将辞任亚马逊 CEO 一职!
- 学计算机的学期计划书,学习计划表
- Android 所遇问题(一)
- inode客户端linux 怎样运行,H3C_iNode智能客户端安装指导(Linux)
- 基于java的健康管理平台设计与实现(含源文件)
- Ae:时间轴面板(图层控制区)
- TensorFlow中图(graphs)概念
- 什么是UI设计,深入了解UI
- 有限元剖网格之Gmsh安装与使用入门
- IDEA中报错:java: -source 1.5 中不支持静态接口方法调用
- 有利可图网_公布有利可图的辅助项目手册
- [知识图谱] 4.1-知识图谱在金融领域中的应用实践