1、SharedPreferences废弃共享模式,详见

2、文件共享(拍照、截图、分享、安装等),禁用file://URL格式共享文件,即无法通过Uri.fromFile(File file)获取的url进行文件共享,会发生FileUriExposedException,适配方案如下:

(1)manifest中声明FilProvider

<providerandroid:name="androidx.core.content.FileProvider"android:authorities="${applicationId}.fileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths" />
</provider>

(2)res/xml/定义共享文件路径

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><files-path name="file" path=""/><cache-path name="file" path=""/><external-path name="external" path=""/><external-files-path name="external-files" path=""/><external-cache-path name="external-cache" path=""/>
</paths>

注:
a、files-path:内部存储空间应用私有目录下的files目录,等同Context.getFilesDis()路径
b、cache-path:内部存储空间应用私有目录下的cache目录,等同Context.getCacheDir()路径
c、external-path:外部存储空间根目录,等同Environment.getExternalStorageDirectory()路径
d、external-files-path:外部存储空间应用私有目录下的files目录,等同Context.getExternalFilesDir()路径
e、external-cache-path:外部存储空间应用私有目录下的cache目录,等同Context.getExternalCacheDir()路径
f、name为自定义名称
g、path为相应根目录下的子路径,为空表示所有子目录
h、files-path、cache-path、external-path、external-files-path、external-cache-path同一类型可以包含多个

(3)生成content://类型Uri

FileProvider.getUriForFile(Context context, String authority, File file)

(4)给Uri授予临时权限

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)

(5)实例:

//拍照private fun camera(){val intent = Intent("android.media.action.IMAGE_CAPTURE")val file = File(Environment.getExternalStorageDirectory(), "demo.png")val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", file)}else{Uri.fromFile(file)}intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)startActivityForResult(intent, REQUEST_CODE_CAMERA)}//裁剪图片private fun cropImage(fromFile: File, toFile: File, aspectX: Int, aspectY: Int, width: Int, height: Int){val intent = Intent("com.android.camera.action.CROP")val fromUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", fromFile)}else{Uri.fromFile(fromFile)}intent.setDataAndType(fromUri, "image/*")intent.putExtra("crop", "true")intent.putExtra("aspectX", aspectX)intent.putExtra("aspectY", aspectY)intent.putExtra("outputX", width)intent.putExtra("outPutY", height)intent.putExtra("scale", true)val toUri = Uri.fromFile(toFile)intent.putExtra(MediaStore.EXTRA_OUTPUT, toUri)intent.putExtra("return-data", true)startActivityForResult(intent, REQUEST_CODE_CROP)}//分享文件private fun shareFiles(fileList: Array<File>){val intent = Intent(Intent.ACTION_SEND_MULTIPLE)val uriList = arrayListOf<Uri>()if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)fileList.forEach {val uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", it)grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)uriList.add(uri)}}else{fileList.forEach {uriList.add(Uri.fromFile(it))}}intent.putExtra(Intent.EXTRA_STREAM, uriList)intent.type = "*/*"startActivityForResult(Intent.createChooser(intent, ""), REQUEST_CODE_SHARE_FILES)}private fun install(file: File){val intent = Intent(Intent.ACTION_VIEW)val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", file)}else{Uri.fromFile(file)}intent.setDataAndType(uri, "application/vnd.android.package-archive")intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)startActivityForResult(intent, REQUEST_CODE_INSTALL)}

(6)其他方案,如下则仍可以使用Uri.fromFile(File file)共享文件(不建议)

//在Application的onCreat()方法中添加
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();StrictMode.setVmPolicy(builder.build());builder.detectFileUriExposure();
}

3、系统广播限制

静态注册网络状态变更广播、拍照广播、录像广播无效,需要动态注册方式

4、支持使用V2签名

Android7.0特性及适配相关推荐

  1. android分屏资源适配,android7.0分屏适配

    版权声明:本文为原创文章,未经允许不得转载! 一.分屏 进入分屏模式:Android N允许用户一次在屏幕中使用两个App.用户可以左右并排/上下摆放两个App来使用,还可以左右/上下拖拽中间的分割线 ...

  2. Android7.0适配方案

    1安装时解析错误 我们的App通常会有检查更新的功能.用户在收到提示更新并且下载完后,会自动打开安装页面让用户来去安装.这时就会出现安装错误的问题,这类的问题的可能性比较多.比如较低版本的App想要覆 ...

  3. Android7.0新特性、新功能

    [本文转载来自http://blog.csdn.net/hao54216/article/details/52388755] 前言: 总想写点自己的东西,因为很多Android知识网上大部分都有教程, ...

  4. android 7.0原生动态,Android7.0适配教程,心得

    Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这 ...

  5. Android7.0适配

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明出处:http://blog.csdn.net/chay_chan/article/details/57083383 关于 ...

  6. Android7.0的适配

    关于Android7.0的适配   最近在软件的维护和更新过程中,了解到一些关于Android7.0的适配,在这里和大家分享一下,据我所知,需要对Notification.拍照.图片的裁剪进行适配 一 ...

  7. Android7.0新特性Jack server

    准备 今天正式担任Android7.0(N)项目模块的开发和维护工作,借此机会git和make了一套系统代码用来研究.在编译的过程中,与以往系统不同的是Android7.0系统编译工具链使用了全新的J ...

  8. Android7.0以上多系统语言的国际化适配

    前言 近期偶然发现一个问题,我们的应用在7.0以上的个别机型上,会遇到国际化不对的问题,现象是:手机明明设置了中文,应用却可能显示成英文. 问题分析 问题机型:三星s8 plus 系统版本:Andro ...

  9. android 适配7.0,Android7.0适配心得(一)_拍照兼容

    1.在Android7.0上调用系统相机拍照,裁切照片的适配 在Android7.0以前,若是你想调用系统相机拍照能够经过如下代码来进行:java File file = new File(Envir ...

最新文章

  1. 礼让行人监控系统+政策助力,共建城市文明交通
  2. Java压缩html
  3. 基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜
  4. IP、TCP、UDP、HTTP头部信息
  5. 谷歌浏览器中文版_中国科学家设计超薄指尖传感器,厚度不到A4纸五分之一 / 谷歌发布地图时光机:百年前,你家街道啥样?/ AI看图说话首超人类...
  6. 信息学奥赛C++语言:质数
  7. ACL2016最佳论文:通过交互学习语言游戏
  8. 自动化运维落实基础及常用工具对比
  9. 网页设计软件列表HTML,【网站设计用什么软件】网页设计软件具体有哪些,常见的十种网页设计软件介绍!...
  10. AcWing 兔子与兔子
  11. (45.2)【端口漏洞发现】扫描工具Nmap、Nessus、Masscan、端口弱口令检查
  12. 牛客网c语言笔试题库,【sql】牛客网练习题 (共 61 题)
  13. 我可以利用计算机查找资料,《信息检索》复习题库 (1)
  14. Android 颜色对照表
  15. SpringCloud(8)— 使用ElasticSearch(RestClient)
  16. 安防视频云服务平台EasyCVR视频智能分析系统运行控制台报404错误如何排查?
  17. 毕业设计——GPU地形高度查询
  18. VOS客户端动态黑名单功能配置详解
  19. mbedtls安装与入门
  20. case when then else end用法

热门文章

  1. MyEclipse项目出现无法解析类型 javax.servlet.http.HttpServletRequest。从必需的 .class 文件间接引用了它
  2. 利用python制作漂亮的词云图_利用python制作词云,wordcloud神器你值得拥有
  3. NokiaX NokiaX2 NokiaXL 开发android adb 找不到设备 解决方案
  4. 快来学习这几个软件,助你实现音频转文字
  5. 蓝桥杯Web组备赛笔记1
  6. 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式省赛(第二场)程序设计试题及其题解
  7. Git、GitHub和Gitee的使用
  8. 感恩工作平台心得体会_感恩与职场 心得体会
  9. h5+app iOS 上架被拒问
  10. 香港理工大学酒店管理html,香港理工大学的酒店管理硕士申请要求有哪些?