Android7.0应用内升级

最近线上项目在7.0机器上出现应用内升级失败,原来是由于Android7.0权限问题导致。

如果项目的 targetSdkVersion>=24 在处理应用内升级的时候需要兼容7.0。

1、创建file_paths.xml文件

  在res下创建xml文件夹,然后在xml文件夹下创建file_paths.xml文件。

  

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources xmlns:android="http://schemas.android.com/apk/res/android">
  3. <paths>
  4. <external-path
  5. name="download"
  6. path=""/>
  7. </paths>
  8. </resources>

说明:apk是下载在Environment.getExternalStorageDirectory()路径下的。

   external-path代表 Environment.getExternalStorageDirectory()目录。

   name:必须有。为Environment.getExternalStorageDirectory()的别名

   path:可以为空。空代表Environment.getExternalStorageDirectory()目录下所有的文件夹和文件。

2、配置AndroidManifest.xml文件添加provider标签

  1. <provider
  2. android:name="android.support.v4.content.FileProvider"
  3. android:authorities="com.ntjr.std.provider"
  4. android:exported="false"
  5. android:grantUriPermissions="true"
  6. >
  7. <meta-data
  8. android:name="android.support.FILE_PROVIDER_PATHS"
  9. android:resource="@xml/file_paths"/>
  10. </provider>

3、安装apk的方法进行版本判断:

  

  1. public void installApk(Context context, File file) {
  2. if (!file.exists()) {
  3. ToastUtil.show(mContext, "安装失败");
  4. return;
  5. }
  6. Intent intent = new Intent();
  7. intent.setAction(android.content.Intent.ACTION_VIEW);
  8.  
  9.       //版本>=24
  10. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
           
          //参数说明:
           context:上下文
           authority:必须和provider中声明的android:authorities值一致
    file:所下载的apk文件
  1. Uri contentUri = FileProvider.getUriForFile(context, "com.ntjr.std.provider", file);
  2. intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
  3. intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
  4. intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  5. } else {
  6. Uri uri = Uri.fromFile(file);
  7. intent.setDataAndType(uri, "application/vnd.android.package-archive");
  8. }
  9. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  10. context.startActivity(intent);
  11. }

要注意使用的是 addFlags还是setFlags。setFlags会清除掉上面所设置的flag。

Android7.0 应用内升级的更多相关文章

  1. Android 升级安装APK兼容Android7.0,解决FileUriExposedException

    我们在开发app时避免不了需要添加应用内升级功能.当app启动时,如果检测到最新版本,将apk安装包从服务器下载下来,执行安装.安装apk的代码一般写法如下,网上随处可以搜到 public stati ...

  2. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇

    1.简介 众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用 ...

  3. WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码

    上篇博客(WmS详解(一)之token到底是什么?基于Android7.0源码)中我们简要介绍了token的作用,这里涉及到的概念非常多,其中出现频率最高的要数Window和窗口这一对搭档了,那么我们 ...

  4. Appium在Android7.0及以上系统运行时报错的解决方案

    背景:在使用Samsung S系列手机进行自动化测试时,发现同样脚本的情况下华为荣耀系列可以正常运行,最终发现差异在于Android7.0及以上系统和appium版本不匹配,需要升级appium.但需 ...

  5. Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片

    Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...

  6. Android7.0新特性,及Android N适配

    新特性部分 Android 7.0 Nougat 提供新功能以提升性能.生产效率和安全性,主要新增了下面的新特性和优化: 一.新的Notification Android N 添加了很多新的notif ...

  7. WmS具体解释(二)之怎样理解Window和窗体的关系?基于Android7.0源代码

    上篇博客(WmS具体解释(一)之token究竟是什么?基于Android7.0源代码)中我们简要介绍了token的作用,这里涉及到的概念非常多,当中出现频率最高的要数Window和窗体这一对搭档了,那 ...

  8. appium在android7.0上无法启动问题

    前言 由于最近很多android手机升级到7.0系统了,有些小伙伴的appium版本用的还是1.4版本,在运行android7.0的app自动化时候遇到无法启动问题:WebDriverExceptio ...

  9. 下载安装APK(兼容Android7.0)

    我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载. 一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和 ...

随机推荐

  1. django 外键操作

    下面定义两个模型,一个主表,一个字表. 举例说明: 如何通过主表对象找到对应的子表对象? 如何通过子表对象找到对应的主表对象? class Person(models.Model); name = m ...

  2. Unix I/O--输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程

    输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程 https://www.bbsmax.com/A/o75N88ZxzW/ 10.1 Unix I/O 一个Unix ...

  3. BZOJ2141:排队(分块,树状数组)

    Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们 ...

  4. 【AngularJS学习笔记】封装一些简单的控件(封装成Html标签)

    bootstrap有强大的指令系统,可以自定义一些属性,基本知识请移步:http://angularjs.cn/A00r  http://www.cnblogs.com/lvdabao/p/33916 ...

  5. react使用echarts地图实现中国地图大区展示

    日常项目中经常会用到百度地图或者echarts图标展示,今天给大家展示的是如何在react开发项目中使用百度echars的地图展示,把中国地图分为东北大区.华东大区.华南大区.华西大区.华中大区以及华 ...

  6. Python 学习笔记(十二)Python文件和迭代(一)

    文件 文件和文件夹 文件:文本文件.二进制文件 文件夹:(windows) G:\pythonWorkspace\python\study (linux/mac) /home/workspace/py ...

  7. Reading Notes : 180214 计算机的总线结构

    读书<计算机组成原理>,百度百科 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和一些基本信息,简单认识,以后再深入了 ...

  8. center os 7 修改 mysql 密码

    笔记 本redis 密码 654321忘记密码:修改密码update user set authentication_string=password('123456') where user='roo ...

  9. Jquery 操作 select 的操作指南

    这里我们以一个简单的select作为原型来进行说明: <select> <option value="a1">香蕉1</option> < ...

  10. iOS7下Status Bar字体颜色修改

    原文来自这里:iOS7下Status Bar字体颜色修改. 旧项目在iOS7上遇到status bar字体颜色需要修改的问题,症状如下:导航栏设置为黑色后,iphone上status bar的字体颜色 ...