Android中获取选择图片与获取拍照返回结果差异
导语:
如今的安卓应用在选择图片的处理上大多合并使用拍照和从相册中选择这两种方式
今天在写一个这样的功能时遇到一个尴尬的问题,同样是拍照获取图片功能,在不同手机上运行的效果不一样,下面是在某型手机上测试的报错结果
错误报告:
10-21 17:41:43.634: E/AndroidRuntime(32683): FATAL EXCEPTION: main
问题分析:
这是出错部分代码,可以看到我直接从返回Intent中获取uri,但实际上有些手机在拍照后uri是空的,所以空指针异常也不奇怪了
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
ContentResolver cr = this.getContentResolver();
try {
if (bmp != null)
bmp.recycle();
bmp = BitmapFactory.decodeStream(cr.openInputStream(uri));
bmp = MediaStore.Images.Media.getBitmap(cr, uri);
imagedata = StreamUtils.stream2ByteArray(cr
.openInputStream(uri));
AVFile img_file = new AVFile("photo_1", imagedata);
img_file.saveInBackground();
images.add(img_file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
photo.setImageBitmap(bmp);
} else {
Toast.makeText(PublishActivity.this, "请重新选择图片",
Toast.LENGTH_SHORT).show();
}
所以解决方法就是分别处理从相册选取和拍照这两种情况,以便能适应更多的设备
解决办法
10代表拍照,20代表从相册选取。
if (requestCode == 10) {
if (resultCode == RESULT_OK) {
if (bmp != null)
bmp.recycle(); bmp = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
imagedata = baos.toByteArray();
AVFile img_file = new AVFile("photo_1", imagedata);
img_file.saveInBackground();
images.add(img_file);
photo.setImageBitmap(bmp);
} else {
Toast.makeText(PublishActivity.this, "请重新选择图片",
Toast.LENGTH_SHORT).show();
}
}
if (requestCode == 20) {
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
ContentResolver cr = this.getContentResolver();
try {
if (bmp != null)
bmp.recycle();
bmp = BitmapFactory.decodeStream(cr.openInputStream(uri));
bmp = MediaStore.Images.Media.getBitmap(cr, uri);
imagedata = StreamUtils.stream2ByteArray(cr
.openInputStream(uri));
AVFile img_file = new AVFile("photo_1", imagedata);
img_file.saveInBackground();
images.add(img_file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
photo.setImageBitmap(bmp);
} else {
Toast.makeText(PublishActivity.this, "请重新选择图片",
Toast.LENGTH_SHORT).show();
}
}
Android中获取选择图片与获取拍照返回结果差异的更多相关文章
- Qt 打开安卓相冊选择图片并获取图片的本地路径
Qt 打开安卓相冊选择图片并获取图片的本地路径 过程例如以下: 通过 Intent 打开安卓的系统相冊. 推荐使用 QAndroidJniObject::getStaticObjectField 获取 ...
- input file获取选择图片的本地路径和base64路径
input file获取选择图片的本地路径和base64路径 本地路径: myHeadFile: function (e) { // 这里是input file 的onchange事件 ] const ...
- android中使用Nine-Patch图片
android中可以把图片进行处理,如果图片被拉伸的话,允许让图片部分区域不拉伸,部分区域拉伸.这个功能非常好,比如聊天的气泡,如果整个气泡被拉伸的话,会非常的丑. 老版的sdk中提供的有draw9p ...
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
获取ImageView的背景图片使用getDrawableCache方法,不要使用getDrawable方法,后者获取不到图片的. 1.在调用imageView.getDrawableCache()之 ...
- Android中 Bitmap Drawable Paint的获取、转换以及使用
比如Drawable中有一系列连续的图片,img_0.png, img_1.png, img_2.png ... 如果要动态获取这些图片,通过"R.drawable.img_x"的 ...
- Android 打开照相机、获取相册图片、获取图片并裁减
一.调用照相机 注:surfaceView在当Activity不在前台的时候,会被销毁(onPause方法之后,执行销毁方法)当Activity回到前台时,在Activity执行onResume方法之 ...
- [原创]Android中LocationManager的简单使用,获取当前位置
Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置:注册/注销来自某个 LocationProvider的周期性的位置更新:以及注册/注销接近 ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- Android 调用图库选择图片实现和参数详解
//选择图片,调用图库 bt4.setOnClickListener(new OnClickListener() { @Override public void o ...
随机推荐
- Linux中fork()函数详解
一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同 ...
- 419. Battleships in a Board
https://leetcode.com/problems/battleships-in-a-board/ 给定一个N×N的棋盘,有任意数量的1×N或N×1大小的"船",注意船船之 ...
- java 持久框架mybatis的初步学习
什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBati ...
- tp5 中 model 的获取器
在获取数据的字段值后自动进行处理 // 模型中写入如下代码,则查询结果会自动将status的结果进行转换 class User extends Model { public function getS ...
- js实现复选框全选
HTML代码如下: <div> <label><input type="checkbox" name="aAll">全选&l ...
- MySQL Fabric和MyBatis的整合过程中遇到的问题
这是我昨天在整合MySQL Fabric和MyBatis时遇到的问题,花了大半天才解决的问题,解决的过程中在网上查找了很久,都没有找到解决的方案.现在记下来,希望能够帮助有同样问题的朋友.如果各位朋友 ...
- 整数转IP地址
将一个整数,比如1567898765转换为xxx.xxx.xxx.xxx的IP地址的形式, 以下是源代码 union IPNode{ unsigned int addr; struct { unsig ...
- Ubuntu 14.04 更换阿里云源[转]
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份 sudo vim /etc/apt/sources.list #修改 sudo ...
- LightGBM中GBDT的实现
现在LightGBM开源了,这里将之前的一个文档发布出来供大家参考,帮助更快理解LightGBM的实现,整体思路应该是类似的. LightGBM优雅,快速,效果好,希望LightGBM越来越好:) L ...
- 【疑难杂症系列01】TypeError: alert is not a function
一.背景 话说今天在调试js的时候,碰到一个很奇怪的问题,现记录一下.当使用alert()函数弹出提示时,总是报错,你没看错,alert函数报错了. 二.详细说明 当时正在做一个关于告警的页面展示功能 ...