Android 裁切踩坑
Android 裁切图片功能
动态申请权限
申请文件的读写权限
Android 7以上适配FileProvider
Android 7 以后,Android对文件的保护变得十分严格,应用只有在调用自己的私有目录时才不需要权限,其他目录都需要动态申请权限。并且uri的创建不能再使用
uri.fromFile();
的方法,需要使用FileProvider的静态方法进行创建。Uri out = FileProvider.getUriForFile()。
从系统图库选择图片
Intent intent = new Intent(Intent.ACTION_PICK,null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*"); activity.startActivityForResult(intent, BasicSDK.REQUEST_CUT_IMAGE_CAPTURE);
调用系统CROP方法进行裁切
android系统有图片裁切的方法,需要通过intent进行调用。
Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*");//设置要处理的图片资源 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);// 这两句是在7.0以上版本 intent.putExtra("crop", "true"); intent.putExtra("aspectX", ox);//裁切框的比例 intent.putExtra("aspectY", oy); intent.putExtra("outputX", x);//输出图片的宽高像素数 intent.putExtra("outputY", y); intent.putExtra("scale", true);//裁剪时是否保留宽高比
两种方法返回数据
两种方法的区别:通过return-data返回数据的话,返回的数据有大小限制,貌似是不大于1M的bitmap,小尺寸图片的话用return-data就可以,转换成jpg大概180宽高最大,超过之后就会被压缩到180左右,而使用MediaStore.EXTRA_OUTPUT返回数据的话不会有这个限制,适合对大图片进行裁切的时候使用,保存的是全尺寸图像。
通过return-data返回数据
通过return-data返回数据时需要将return-data设置为true,之后裁切后的数据会通过intent返回到回调函数中。
intent.putExtra("return-data", true); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//输出格式 intent.putExtra("noFaceDetection", true); // 取消人脸识别 intent = Intent.createChooser(intent, "裁剪图片"); activity.startActivityForResult(intent, BasicSDK.REQUEST_CUT_IMAGE);
通过MediaStore.EXTRA_OUTPUT返回数据
将return-data设置为false之后,裁切到的图片会保存到自定义的地址。
intent.putExtra("return-data", false); Uri out = FileProvider.getUriForFile(activity,"com.basicsdk.sdkdemo.provider", new File(getSave_file()));//这里不能用这种方法创建uri,否则会报错,不理解 String save_file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath()+"/save_"+UUID.randomUUID().toString()+".jpg";//自定义存储地址,这里需要将文件的保存地址定义到公共目录中,不能放到应用的私有目录,否则会保存不了,因为一般情况下只有应用本身能访问自己的私有目录。 setSave_file(save_file);//忽略 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(save_file)));//存储地址 intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // 取消人脸识别 intent = Intent.createChooser(intent, "裁剪图片"); activity.startActivityForResult(intent, BasicSDK.REQUEST_CUT_IMAGE);
图片回显
同样不能使用
uri.fromFile();
的方法获取图片,需要改成这种Uri out = FileProvider.getUriForFile()
Uri out =FileProvider.getUriForFile(getApplicationContext(),"com.basicsdk.sdkdemo.provider", new File(photoPath)); imageView.setImageURI(out);
Android 裁切踩坑相关推荐
- Android applink 踩坑指南
Android applink 踩坑指南 原理 接入步骤 将链接与activity关联起来 加入meta data 生成身份验证JSON 真机测试 结论 官方文档 原理 与url scheme不同的地 ...
- Android 海外踩坑记录
Android 海外踩坑记录 谷歌相关: 1.免安装应用的版本号需要比安装式应用的要低,所以安装式应用打包时可以将版本号尽量设置大一点. 2.如果该应用存在免安装应用,那么安装式应用的manifest ...
- android seekbar闪退,android seekbar 踩坑之路
最近项目中有用到seekbar,之前对这东西不太了解,趁机来踩坑. seekbar样式 按我觉得Material 中的还不算难看了.但是美工给了自己的样式,还是得改. 主要有这2个属性: androi ...
- cocos creator 打包apk_cocos creator android 编译踩坑
报错1: Execution failed for task ':mergeDebugAssets'. 解决方案: 之前是有路径太长的问题,在 project build.gradle 里面的all ...
- Android WebView 踩坑日记,字体怎么突然变小了???
背景 最近,端内在做 webView 统一的时候,个性签名中的 WebView 替换为 CustomWebView 之后,发现字体突然变小. 一开始不知道是什么原因,通过二分法查找最近的提交,排查之后 ...
- Android开发踩坑之旅
在此记录一些Android开发中的踩坑记录,仅供复习和参考 问题:小米 MIUI系统 相机无法调用 Camer2 新Api的问题 过程:在运行 Android-23 Samples 中 media文件 ...
- android ble mvp,Android mvparms 踩坑
GitHub:https://github.com/JessYanCoding/MVPArms 起先是想自己封装Retrofit+Rxjava+mvp这种架构,在网上参考了很多文章,结果就看到了关于m ...
- Android WebView 踩坑日记,字体怎么突然变小了?
parsedHtml += "<meta name="viewport" content="width=device-width,initial-scal ...
- android smartbar,android seekbar 踩坑之路
最近项目中有用到seekbar,之前对这东西不太了解,趁机来踩坑. seekbar样式 按我觉得Material 中的还不算难看了.但是美工给了自己的样式,还是得改. 主要有这2个属性: androi ...
最新文章
- redis事务和脚本
- 转载:Java 内存区域和GC机制
- 多校1010 Taotao Picks Apples
- python自动提交网页表单_python自动提交表单数据库
- IntelliJ IDEA下git版本回退,版本还原
- java线程等待按钮点击_java如何用多线程使线程在sleep时等待按钮按下?
- linux 让暂停的进程恢复,Linux 下进程的挂起和恢复命令
- 《南溪的目标检测学习笔记》——数值编码(encode)的学习笔记
- php工程师各大公司要求
- 转 Git-fatal: unable to access 'xxx' : Could not resolve host: xxx
- Android中怎么方便的调试关机充电
- Spring Cloud Eureka服务注册中心 单节点搭建(学习总结)
- 是否可以将现有图表导入到 think-cell?
- Kotlin如何写脚本
- MySQL order by、desc、limt的使用
- rust炼油机怎么搞_rust挖油机在哪个位置 | 手游网游页游攻略大全
- jena java_java – 使用Jena查询wikidata
- 免流解密之SAOML二开
- asp .net 和 ASP
- 读取excel数据 画k线 成交量图
热门文章
- 如何解决json中携带的反斜杠_【经验分享】python干货:5种反扒机制的解决方法...
- react build后直接从浏览器打开
- 整理了js数组去重4种方法
- XML DOM学习笔记(JS)
- 跟KingDZ学HTML5之八 HTML5之Web Save
- 【python VS Code】调用自定义模块 ModuleNotFoundError: No module named XXX
- 服务器系统咋关机呀,各种服务器系统的关机
- Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战
- android中的用户资源访问(一)
- [视频]MAC中如何单独放大文本字体