Android7.0特性及适配
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特性及适配相关推荐
- android分屏资源适配,android7.0分屏适配
版权声明:本文为原创文章,未经允许不得转载! 一.分屏 进入分屏模式:Android N允许用户一次在屏幕中使用两个App.用户可以左右并排/上下摆放两个App来使用,还可以左右/上下拖拽中间的分割线 ...
- Android7.0适配方案
1安装时解析错误 我们的App通常会有检查更新的功能.用户在收到提示更新并且下载完后,会自动打开安装页面让用户来去安装.这时就会出现安装错误的问题,这类的问题的可能性比较多.比如较低版本的App想要覆 ...
- Android7.0新特性、新功能
[本文转载来自http://blog.csdn.net/hao54216/article/details/52388755] 前言: 总想写点自己的东西,因为很多Android知识网上大部分都有教程, ...
- android 7.0原生动态,Android7.0适配教程,心得
Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这 ...
- Android7.0适配
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明出处:http://blog.csdn.net/chay_chan/article/details/57083383 关于 ...
- Android7.0的适配
关于Android7.0的适配 最近在软件的维护和更新过程中,了解到一些关于Android7.0的适配,在这里和大家分享一下,据我所知,需要对Notification.拍照.图片的裁剪进行适配 一 ...
- Android7.0新特性Jack server
准备 今天正式担任Android7.0(N)项目模块的开发和维护工作,借此机会git和make了一套系统代码用来研究.在编译的过程中,与以往系统不同的是Android7.0系统编译工具链使用了全新的J ...
- Android7.0以上多系统语言的国际化适配
前言 近期偶然发现一个问题,我们的应用在7.0以上的个别机型上,会遇到国际化不对的问题,现象是:手机明明设置了中文,应用却可能显示成英文. 问题分析 问题机型:三星s8 plus 系统版本:Andro ...
- android 适配7.0,Android7.0适配心得(一)_拍照兼容
1.在Android7.0上调用系统相机拍照,裁切照片的适配 在Android7.0以前,若是你想调用系统相机拍照能够经过如下代码来进行:java File file = new File(Envir ...
最新文章
- 礼让行人监控系统+政策助力,共建城市文明交通
- Java压缩html
- 基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜
- IP、TCP、UDP、HTTP头部信息
- 谷歌浏览器中文版_中国科学家设计超薄指尖传感器,厚度不到A4纸五分之一 / 谷歌发布地图时光机:百年前,你家街道啥样?/ AI看图说话首超人类...
- 信息学奥赛C++语言:质数
- ACL2016最佳论文:通过交互学习语言游戏
- 自动化运维落实基础及常用工具对比
- 网页设计软件列表HTML,【网站设计用什么软件】网页设计软件具体有哪些,常见的十种网页设计软件介绍!...
- AcWing 兔子与兔子
- (45.2)【端口漏洞发现】扫描工具Nmap、Nessus、Masscan、端口弱口令检查
- 牛客网c语言笔试题库,【sql】牛客网练习题 (共 61 题)
- 我可以利用计算机查找资料,《信息检索》复习题库 (1)
- Android 颜色对照表
- SpringCloud(8)— 使用ElasticSearch(RestClient)
- 安防视频云服务平台EasyCVR视频智能分析系统运行控制台报404错误如何排查?
- 毕业设计——GPU地形高度查询
- VOS客户端动态黑名单功能配置详解
- mbedtls安装与入门
- case when then else end用法
热门文章
- MyEclipse项目出现无法解析类型 javax.servlet.http.HttpServletRequest。从必需的 .class 文件间接引用了它
- 利用python制作漂亮的词云图_利用python制作词云,wordcloud神器你值得拥有
- NokiaX NokiaX2 NokiaXL 开发android adb 找不到设备 解决方案
- 快来学习这几个软件,助你实现音频转文字
- 蓝桥杯Web组备赛笔记1
- 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式省赛(第二场)程序设计试题及其题解
- Git、GitHub和Gitee的使用
- 感恩工作平台心得体会_感恩与职场 心得体会
- h5+app iOS 上架被拒问
- 香港理工大学酒店管理html,香港理工大学的酒店管理硕士申请要求有哪些?