Android7.0文件读写(获取拍照结果)笔记
来源:互联网 发布:uber软件下载 编辑:程序博客网 时间:2024/06/08 01:03
由于随着Android版本越来越高,Android对用户隐私保护力度越来越大,从Android6.0引入动态权限控制(Runtime Permission)到Android7.0私有目录被限制访问,“StrictMode API政策”.由于之前Android版本中,是可以读取到手机存储中任何一个目录及文件,这带来很多安全问题.在Android7.0中为了提高私有文件的安全性.面向Android N或者更高版本将被限制访问.
私有文件的文件权限不再放权给所有的应用,使用MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE进行操作触发SecurityException.这使得无法通过File API访问手机存储上的数据了,基于File API的一些文件浏览器也将受到很大影响.
给其他应用传递file://URI类型的Uri,可能会导致接收者无法访问该路径,因为在Android7.0中传递file://URI会触发FileUriExposedException.可以通过FileProvider来解决.
DownloadManager不再按文件名分享私人存储的文件,COLUMN_LOCAL_FILENAME在Android7.0中标记为deprecate,旧版应用在访问COLUMN_LOCAL_FILENAME可能会出现无法访问的路径.面向Android N或者更高版本中应用尝试访问COLUMN_LOCAL_FILENAME时会触发SecurityException.但可以通过ContentResolver.openFileDescriptor()来访问DownloadManager公开的文件.
- 清单文件配置provider
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="xxx"><application><provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/rc_file_path" /> </provider></application></manifest>
res/xml/rc_file_path.xml
<?xml version="1.0" encoding="utf-8"?><paths><external-path name="rc_external_path" path="."/></paths>
创建临时图片
if (CommonUtils.checkSDCard()) { File stubFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.pathSeparator + CROP_FILE_NAME); return FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".FileProvider", stubFile); //return Uri.fromFile(Environment.getExternalStorageDirectory()).buildUpon().appendPath(CROP_FILE_NAME).build();Android7.0以前 } else { File stubFile = new File(activity.getCacheDir().getAbsolutePath() + File.pathSeparator + CROP_FILE_NAME); return FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".FileProvider", stubFile); //return Uri.fromFile(activity.getCacheDir()).buildUpon().appendPath(CROP_FILE_NAME).build();Android7.0以前 }
启动相机
try { //每次选择图片把之前的图片删除 clearCropFile(buildUri(fragment._mActivity)); LogUtils.d("feige", "buildUri-->" + buildUri(fragment._mActivity).getPath()); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, buildUri(fragment._mActivity)); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); if (!isIntentAvailable(fragment._mActivity, intent)) { return; } fragment.startActivityForResult(intent, INTENT_TAKE); } catch (Exception e) { e.printStackTrace(); }
- Android7.0文件读写(获取拍照结果)笔记
- Android7.0启用摄像头拍照
- Android7.0拍照失败FileUriExposedException
- 适配android7.0:获取文件的Uri
- 适配android7.0:获取文件的Uri
- android7.0调用拍照及获取相册,遇到的一些问题
- 适配Android7.0的拍照,选取照片
- Android7.0及以上 拍照crash问题
- Android7.0 拍照 选择照片 权限 实现
- Android7.0 头像 拍照、照片裁剪
- Android7.0拍照以及使用uCrop裁剪
- Android7.0相机拍照功能导致FileUriExposedException
- android7.0 权限获取
- android7.0 获取uri
- Android7.0文件共享
- Android7.0上拍照与选择照片Crash问题
- Android7.0调用系统相机拍照、访问相册问题。
- android7.0 拍照、相册选图、裁剪实现
- 类成员属性封装
- 程序员的人生五件大事
- GitChat·大数据 | 史上最详细的Hadoop环境搭建
- Linux的顶层目录结构
- 第5周 【项目3】 括号的匹配
- Android7.0文件读写(获取拍照结果)笔记
- mysql 表分区 按天分区
- Siemens.NX.Nastran.12.0.Win64.&.Linux64 2DVD
- iOS-判断字符串为空你以为这么简单吗?
- 进程线程例子
- ZooKeeper的典型应用场景之分布式协调/通知。
- Redis初始化
- git commit -am 之后,撤销并保留修改
- 数据结构期末课堂总结