解决小米miui系统调用系统裁剪图片功能camera.action.CROP后崩溃或重新打开app的问题
选择相册图片(或调用MediaStore.ACTION_IMAGE_CAPTURE拍照),然后裁剪。在其他系统上都测试正常,但是在小米上出现了问题。小米2s上,裁剪后点击确定直接卡死系统;小米3上,裁剪后点击确定直接回到主界面,相当于重新打开app。就是说,裁剪后,无法响应onActivityResult(),裁剪方法如下:
/*** 裁剪图片*/private void startPhotoZoom(Uri uri, int size) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// crop为true是设置在开启的intent中设置显示的view可以剪裁intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX,outputY 是剪裁图片的宽高intent.putExtra("outputX", size);intent.putExtra("outputY", size);intent.putExtra("return-data", true); startActivityForResult(intent, PHOTO_REQUEST_CUT);}
上述方法中,裁剪后的图片通过Intent的putExtra("return-data",true)方法进行传递,miui系统问题就出在这里,return-data的方式只适用于小图,miui系统默认的裁剪图片可能裁剪得过大,或对return-data分配的资源不足,造成return-data失败。
解决思路是:裁剪后,intent保存图片的资源路径Uri,在onActivityResult()方法中,再提取对应的Uri图片资源转换为Bitmap使用。
/*** 裁剪图片*/private void startPhotoZoom(Uri uri, int size) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// crop为true是设置在开启的intent中设置显示的view可以剪裁intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX,outputY 是剪裁图片的宽高intent.putExtra("outputX", size);intent.putExtra("outputY", size);/*** 此方法返回的图片只能是小图片(sumsang测试为高宽160px的图片)* 故只保存图片Uri,调用时将Uri转换为Bitmap,此方法还可解决miui系统不能return data的问题*///intent.putExtra("return-data", true); //裁剪后的图片Uri路径,uritempFile为Uri类变量uritempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());startActivityForResult(intent, PHOTO_REQUEST_CUT);}
然后在onActivityResult()中处理:
/*** 处理返回结果*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubcase PHOTO_REQUEST_CUT: //将Uri图片转换为BitmapBitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));//TODO,将裁剪的bitmap显示在imageview控件上break;}super.onActivityResult(requestCode, resultCode, data);}
解决小米miui系统调用系统裁剪图片功能camera.action.CROP后崩溃或重新打开app的问题相关推荐
- 解决小米miui系统调用系统裁剪图片功能崩溃失败的问题
项目中选择图片作为头像,都要经过剪裁的过程.一般我们都调用系统剪裁的方法.不过该方法在其它系统上都显示正常,但是在miui系统上就出错了.经测试发现其他系统 cropBitmap = data.get ...
- 彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题
彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题 参考文章: (1)彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题 (2)https://www.cnblog ...
- android调用系统裁剪图片 返回模糊 不清晰的问题
基本这个功能都是在头像设置的时候会用到 Android 从相机拍完照片 然后跳去系统自带的裁剪 或者从相册选取图片裁剪 然后把裁剪好的图片设置成头像 这里直接贴上跳到裁剪部分的代码 private ...
- android裁剪图片功能,实战:七步教你Android图片拍摄及剪裁
[IT168技术]现在,很多Android设备都有内置的摄象头了,在本教程中,我们将学习如何在程序中调用Android手机中的摄象头进行图像的摄制,并且如何在拍摄照片后,如何利用用户已经安装在设备中的 ...
- android裁剪图片功能,Android实现图片区域裁剪功能
今天做的就是关于实现图片的区域裁剪功能.由于项目功能的需要笔者需要实现PDF文档的阅读,并且就某个页面实现"图片"裁剪(一个页面理解为一张图片).笔者对着方面是一点儿也不熟悉,因此 ...
- 安卓图片操作(调用系统相机,预览本地照片,调用系统裁剪图片,压缩图片,中心裁剪方形图片,bitmap转byte[])
先创建照片存储uri public static Uri createImagePathUri(Context context) {Uri imageFilePath = null;String st ...
- android crop 大图,com.android.camera.action.CROP 实现图片剪裁
APP 中选取图片之后,有时候需要进行剪裁,比如头像. 以下是启动代码. 在我的项目中,传的是 filePath,所以我转了一下,但实际上从相册选择图片后,用 data.getData() 就可获得 ...
- 小米笔记本重装系统没有wifi功能和扬声器没有声音解决的过程(红米G游戏本)
要看解决方法的直接看文章最后 经过: 1.因为自己已经用pe系统给很多同学包括我自己重装过很多次系统了,所以最开始打算用pe给小米笔记本装系统.pe盘里面装的镜像是MSDN上面下载的最新1909的wi ...
- 小米MIUI双系统原理及刷机
很多人都会关注小米手机的双系统吧,其实小米现在还不能真正的实现双系统,但确实能用上双系统.# M9 B# m% q! Z- c 说到MIUI系统的刷机,我们首先想到的是观音哥介绍的6种刷机的方式.具体 ...
最新文章
- Bash中的逻辑运算
- 7.5 TableLayout布局详解
- Windows Azure Marketplace增加对六种语言和HTML5应用程序的支持
- Oracle12c异常关闭后启动PDBORCL(ORA-01033)
- Linux 修改SSH端口 和 禁止Root远程登陆
- 查看sql语句的执行计划
- elasticsearch(es)的安装-macOs
- opencv之cvtColor()函数
- 面对互联网寒冬,程序员能够做什么?
- web前端-写给大家看的设计书-笔记-颜色运用-色轮使用
- java程序一维数组能被5整除,JAVA鏈熸湯璇曢闆?鍚瓟妗? - 鐧惧害鏂囧簱
- SAP中不同质检类型对收货的影响的现实案例分析
- 思科交换机配置ipv6实验
- 【新手入门.考试高频】Java中“一个类声明的两个对象如果有相同的引用,二者就有相同的变量”的理解
- Struts框架实战精讲 struts1(2)- 登录案例
- web开源框架大汇总
- JS元素的提取,删除 ,添加,修改
- 价格暴涨却一车难求,春节租车比卖车好做?
- 《商战往事》读书笔记
- *.accdb数据文件的数据解析工具类