Android7.0 应用内升级
Android7.0应用内升级
最近线上项目在7.0机器上出现应用内升级失败,原来是由于Android7.0权限问题导致。
如果项目的 targetSdkVersion>=24 在处理应用内升级的时候需要兼容7.0。
1、创建file_paths.xml文件
在res下创建xml文件夹,然后在xml文件夹下创建file_paths.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<external-path
name="download"
path=""/>
</paths>
</resources>
说明:apk是下载在Environment.getExternalStorageDirectory()路径下的。
external-path代表 Environment.getExternalStorageDirectory()目录。
name:必须有。为Environment.getExternalStorageDirectory()的别名
path:可以为空。空代表Environment.getExternalStorageDirectory()目录下所有的文件夹和文件。
2、配置AndroidManifest.xml文件添加provider标签
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.ntjr.std.provider"
android:exported="false"
android:grantUriPermissions="true"
>
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
3、安装apk的方法进行版本判断:
public void installApk(Context context, File file) {
if (!file.exists()) {
ToastUtil.show(mContext, "安装失败");
return;
}
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
//版本>=24
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//参数说明:
context:上下文
authority:必须和provider中声明的android:authorities值一致
file:所下载的apk文件
Uri contentUri = FileProvider.getUriForFile(context, "com.ntjr.std.provider", file);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else {
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
要注意使用的是 addFlags还是setFlags。setFlags会清除掉上面所设置的flag。
Android7.0 应用内升级的更多相关文章
- Android 升级安装APK兼容Android7.0,解决FileUriExposedException
我们在开发app时避免不了需要添加应用内升级功能.当app启动时,如果检测到最新版本,将apk安装包从服务器下载下来,执行安装.安装apk的代码一般写法如下,网上随处可以搜到 public stati ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇
1.简介 众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用 ...
- WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码
上篇博客(WmS详解(一)之token到底是什么?基于Android7.0源码)中我们简要介绍了token的作用,这里涉及到的概念非常多,其中出现频率最高的要数Window和窗口这一对搭档了,那么我们 ...
- Appium在Android7.0及以上系统运行时报错的解决方案
背景:在使用Samsung S系列手机进行自动化测试时,发现同样脚本的情况下华为荣耀系列可以正常运行,最终发现差异在于Android7.0及以上系统和appium版本不匹配,需要升级appium.但需 ...
- Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片
Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...
- Android7.0新特性,及Android N适配
新特性部分 Android 7.0 Nougat 提供新功能以提升性能.生产效率和安全性,主要新增了下面的新特性和优化: 一.新的Notification Android N 添加了很多新的notif ...
- WmS具体解释(二)之怎样理解Window和窗体的关系?基于Android7.0源代码
上篇博客(WmS具体解释(一)之token究竟是什么?基于Android7.0源代码)中我们简要介绍了token的作用,这里涉及到的概念非常多,当中出现频率最高的要数Window和窗体这一对搭档了,那 ...
- appium在android7.0上无法启动问题
前言 由于最近很多android手机升级到7.0系统了,有些小伙伴的appium版本用的还是1.4版本,在运行android7.0的app自动化时候遇到无法启动问题:WebDriverExceptio ...
- 下载安装APK(兼容Android7.0)
我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载. 一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和 ...
随机推荐
- Intellij IDEA 快速补全for循环:fori
快速补全for循环:fori 效果:
- Centos7 yum安装mysql
参考此文档:http://www.jb51.net/article/116032.htm http://www.jb51.net/article/95399.htm 1.在官网下载mysql57-co ...
- 【原创】多字节版本下MFC控件处理字符集的BUG
工程项目属性: 字符集:多字节 stdafx.h文件中添加: #pragma comment(linker,"/manifestdependency:\"type='win32' ...
- windows8安装msi软件提示2503错误的解决办法
windows8以后的版本安装msi软件(比如nodejs.msi.Git.msi.python.msi.T ortoiseSVN.msi)的时候老师出现2503.2502的错误,究其原因还是系统权限 ...
- ROBOCOPY——Windows 的可靠文件复制
复制指定类型文件 (-s :含子目录 不包括空目录) 复制所有 (-e :含子目录 包括空目录) 复制指定成层级内的 (-lev:n 仅复制源目录树的前 n 层) 复制排除给定类型后的 (-xf) ...
- Integer类小细节随笔记录
先看一段简单的代码: Integer v1 = Integer.valueOf(12); Integer v2 = Integer.valueOf(12); Integer v3 = Integer. ...
- 关于ucos操作系统中如何从邮箱中提取出消息
问题提出? 定义两个任务,task1,task2,想task1用OSMboxPost,task2用OSMboxPend定义了一个邮箱Mbox1=OSMboxCreate(括号里面应该怎么写?)还有具体 ...
- 课时25.a标签基本使用(掌握)
什么是a标签? 我们打开百度或者淘宝网页,观察任何一个超链接都会发现它有如下特质: 有下划线 移上去有小手指 可以点击 a标签的作用:就是用于控制页面与页面之间跳转的 a标签的格式:<a hre ...
- 具有代码执行潜力的Vimeo SSRF
最近我在Vimeo上发现了一个半响应的SSRF代码执行的可能性.这篇博客文章解释了我是如何找到并利用它的. 背景 Vimeo为其API提供了一个名为API Playground的API控制台,使用此W ...
- Head First Java学习笔记
1.基本概念 1.1.工作方式 源代码(.java)---编译器(执行javac程序)---产生字节码(.class与平台无关)---JAVA虚拟机(JVM,读取与执行字节码) 1.2.汇编语言是对基 ...