android 相机和相册获取相片剪裁报错问题解决,机型也解决
2016-02-22 16:28
519 查看
背景:在上个星期,我想要做一个头像上传功能,然而我用的是华为手机,听说华为和小米的适配特别难做,果不其然,也有人建议我去自定义一个图片剪裁工具,当然有开源的我就直接用了。
也好使,但是我就是想要在原始的代码上去解决这个问题。结果也是解决了问题。
一般情况中的问题:
1.oom
2.图片方向不对
3.activity result 的时候data == null
4.调用图库的时候没找到软件
以上的问题基本都解决了,但是我今天遇到的问题是第三个,data == null。这个的现象就是,照了相之后跳到图片剪裁,但是在剪裁哪儿剪裁之后就没有反应了,对,没有反应或者就是报错,报的是空指针。
先把做好的给你看看,我的是华为手机,嘿嘿,然后也有源码供你们下载。
直接说怎么解决:
1,在截图这儿的代码,中
在我看的很多博客中都把“return-data”设置为了true然后在onActivityResult中通过data.getParcelableExtra("data")来获取数据,不过这样的话dp这个变量的值就不能太大了,不然你的程序就挂了。这里也就是我遇到问题的地方了,在大多数高配手机上这样用是没有问题的,不过很多低配手机就有点hold不住了,直接就异常了,包括我们的国产神机小米也没能hold住,所以我建议大家不要通过return
data 大数据,小数据还是没有问题的,说以我们在剪切图片的时候就尽量使用Uri这个东东来帮助我们。
纪实:2016.2.22
源码地址:http://download.csdn.net/detail/syif88/9439230
以及自定义相片剪裁工具源码地址:http://download.csdn.net/detail/syif88/9439235
也好使,但是我就是想要在原始的代码上去解决这个问题。结果也是解决了问题。
一般情况中的问题:
1.oom
2.图片方向不对
3.activity result 的时候data == null
4.调用图库的时候没找到软件
以上的问题基本都解决了,但是我今天遇到的问题是第三个,data == null。这个的现象就是,照了相之后跳到图片剪裁,但是在剪裁哪儿剪裁之后就没有反应了,对,没有反应或者就是报错,报的是空指针。
先把做好的给你看看,我的是华为手机,嘿嘿,然后也有源码供你们下载。
直接说怎么解决:
1,在截图这儿的代码,中
intent.putExtra("return-data", false);//设置为不返回数据
在我看的很多博客中都把“return-data”设置为了true然后在onActivityResult中通过data.getParcelableExtra("data")来获取数据,不过这样的话dp这个变量的值就不能太大了,不然你的程序就挂了。这里也就是我遇到问题的地方了,在大多数高配手机上这样用是没有问题的,不过很多低配手机就有点hold不住了,直接就异常了,包括我们的国产神机小米也没能hold住,所以我建议大家不要通过return
data 大数据,小数据还是没有问题的,说以我们在剪切图片的时候就尽量使用Uri这个东东来帮助我们。
* 进行截图 * @param context Activity上下文对象 * @param uri Uri * @param size 大小 */ public static void startPhotoZoom(Activity context,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"); intent.putExtra("scale", true);// 去黑边 intent.putExtra("scaleUpIfNeeded", true);// 去黑边 // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX,outputY 是剪裁图片的宽高 intent.putExtra("outputX", size); intent.putExtra("outputY", size); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); </span><span style="color:#ff6666;">intent.putExtra("return-data", false);//设置为不返回数据 context.startActivityForResult(intent, Configs.SystemPicture.PHOTO_REQUEST_CUT); }2,就是在剪裁图片之后将图片result返回,
<span style="color:#373737;">@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case Configs.SystemPicture.PHOTO_REQUEST_TAKEPHOTO: // 拍照 Log.i("iiiiiii","1232343"); SelectHeadTools.startPhotoZoom(this,photoUri, 600); break; case Configs.SystemPicture.PHOTO_REQUEST_GALLERY://相册获取 if (data !=null) photoUri = data.getData(); SelectHeadTools.startPhotoZoom(this, data.getData(), 600); break; case Configs.SystemPicture.PHOTO_REQUEST_CUT: //接收处理返回的图片结果,这个过程比较重要 Log.i("iiiiiii_cut","1232343"); if (photoUri==null) break; /*Bitmap bit = data.getExtras().getParcelable("data"); </span><span style="color:#ff6666;"> //不要再用data的方式了,会出现activity result 的时候data == null的空的情况 try { cropBitmap = getBitmapFromUri(photoUri, this); /</span><span style="color:#ff6666;">//通过获取uri的方式,直接解决了报空和图片像素高的oom问题 if (cropBitmap != null) { iv_show.setImageBitmap(cropBitmap); } } catch (Exception e) { e.printStackTrace(); } //下面可以用来上传pc服务端 File file = FileTools.getFileByUri(this,photoUri); Log.d("File",file.toString()); break; } } public Bitmap getBitmapFromUri(Uri uri,Context mContext) { try { </span><span style="color:#ff6666;">// 读取uri所在的图片</span><span style="color:#373737;"> Bitmap bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), uri); return bitmap; } catch (Exception e) { e.printStackTrace(); return null; } }对,通过这样的方式就能解决该问题。
纪实:2016.2.22
源码地址:http://download.csdn.net/detail/syif88/9439230
以及自定义相片剪裁工具源码地址:http://download.csdn.net/detail/syif88/9439235
相关文章推荐
- 新建android系统服务
- 使用Android studio创建的AIDL编译时找不到自定义类的解决办法
- Android签名证书的sha1值获取
- Android-Chart
- Android-Chart
- android studio教学视频资源(点开即看)
- Android Studio使用指南
- Android 2016新技术
- android串口通信——电子锁
- android串口通信——电子锁
- android开发步步为营之94:使用PathEffect画虚线和虚线框
- android studio快捷键
- ANDROID_MARS学习笔记_S05_003_传感器采样率及属性
- 关于intent中android.intent.action.USER_PRESENT的说明
- 【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子
- 【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子
- Android应用开发中Fragment存储功能的基本用法
- Android自定义view-弹性ScrollView(上)
- Android学习笔记-界面和数据存储以及一些零碎知识点
- Android-Tab