android异常相机处理,android 调用系统相机拍照的各种异常处理
1 本文只讨论调用系统相机出现的异常解决办法下面是调用系统相机的代码
先看一下最简单的写法
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
android.provider.MediaStore.ACTION_IMAGE_CAPTURE这个是调用系统相机的action
SELECT_PIC_BY_TACK_PHOTO 这个用于在onActivityResult方法里面(和requestCode对应)回调判断
在onActivityResult 这个方法里面一般我们需要从回调的Intent里面取到我们需要的图片
获取图片的方法Bitmap photo = data.getParcelableExtra("data");
这里面得到的是图片的缩略图,但是有些手机这个取到的是是null,所以我们需要另外一种方式
2 指定图片的拍摄路径:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Uri outputFileUri = Uri.fromFile(cameraTempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);这个时候onActivityResult回调以后我们不在用
data.getParcelableExtra(
"data"
); 而是用我们自己定义的cameraTempFile获取拍照后存储的图片
注意:需要缩略图的自己用原图生成即可,不要直接用否则可能会出现内存不足情况
3 用上面的方法依然会有一个问题,有些机型(主要是山寨机)你指定的这个文件,拍照的时候直接奔溃
这个是否我们需要先创建这个文件才可以
cameraTempFile = new File(cameraTempPathDir + timeStamp + ".jpg");
if (!cameraTempFile.exists()) {
try {
cameraTempFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}4 经过以上处理我们可以完美拍照了,什么还有问题onActivityResult没被调用
这个原因主要是你拍照的Activity被系统关闭了,这种情况下cameraTempFile如果不做处理也会为空,下面先说先原因
关闭原因 A 三星的camera强制切换到横屏 导致Activity重启生命周期 (但是部分机型 配置 android:configChanges 也不能阻止横竖屏切换);
B 系统内存不足造成activity被关闭,这个时候会调用
public void onTrimMemory(int level) {
super.onTrimMemory(level);
switch (level) {
case TRIM_MEMORY_UI_HIDDEN:// 内存不足,并且该进程的UI已经不可见了。
}
}
下面说下处理方案,也非常的简单
如果 系统销毁activity, 会在销毁之前调用 onSaveInstanceState,我们在这个方法内 保存图片的路径
当activity重新创建的时候 会将 onSaveInstanceState 保存的文件传递给onCreate()当中
在onCreate当中 检查照片的地址是否存在文件 以此来判定拍照是否成功
然后拿到图片在做后续处理即可
这个地址有一个完整的例子
http://blog.csdn.net/aaawqqq/article/details/37034243
android异常相机处理,android 调用系统相机拍照的各种异常处理相关推荐
- Android多层嵌套Fragment中调用系统相机拍照以及裁剪的相关问题解决
多层嵌套Fragment中调用系统相机拍照.裁剪 最近公司项目有频繁使用相机拍照的需求,然后频繁的实际使用过程中遇到很多大大小小的坑,在此记录下. (ps.关于一些拍照后图片旋转.裁剪设置返回数据为t ...
- 5、Android Studio+JNI+Opencv4.5 调用系统相机,实现图像滤波
基本思想:使用Android Studio+Opencv4.5 实现滤波,并打包成apk,纯属学习~ 该工程git: https://github.com/sxj731533730/AndroidIn ...
- Android多媒体功能开发(4)——调用系统Activity拍照、选择图片、查看图片、裁剪图片
一.拍照 拍照界面就是调用系统照相机,动作为MediaStore.ACTION_IMAGE_CAPTURE.生成的照片有三种返回方式: 在调用拍照应用的Intent中通过EXTRA_OUTPUT属性设 ...
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
原文地址:https://blog.csdn.net/msn465780/article/details/59058088?locationNum=8&fps=1 Android7.0以前获取 ...
- android调用系统相机返回图片模糊
最近需要用到调用系统相机拍摄照片的功能,于是就直接调用系统的相机进行拍照,发现返回的bitmap存储之后都是非常模糊的 调用系统相机拍摄照片,由于StartActivityForResult过时,改用 ...
- android 实现自动拍照,Android:调用系统相机实现拍照+裁切(兼容7.0以上系统)
android.jpg 前言 在平时的工作中,我们会经常遇到这样的需求:比如更改用户头像,我们就需要打开相机或相册,选择照片后进行裁剪,最后上传给后台... 相信这样的功能对小伙伴们来说可能早已司空见 ...
- android调用相机与相册的方法,手把手教你:android调用系统相机、相册功能,适配6.0权限获取以及7.0之后获取URI(兼容多版本)...
Android中调用系统相机来拍摄照片的代码,以下:html 一.首先设置Uri获取判断以及相机请求Codejava public final int TYPE_TAKE_PHOTO = 1;//Ur ...
- 调用系统相机、相册、剪裁图片,适配Android 12
第一步:FileProvider相关准备工作 在AndroidManifest.xml中增加provider节点: <providerandroid:name="androidx.co ...
- android调用系统相机实现拍照功能
在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题. 虽然之前看过android开发的书,但是没有做过东西,这次也是临时决定让我做一个 ...
最新文章
- java中properties作用,java中Properties类的使用
- 企业网络推广下微软服务器浸泡于液体试图提高服务器的散热与性能
- MVC扩展控制器工厂,通过继承DefaultControllerFactory来决定使用哪个接口实现,使用Ninject...
- boost::stl_interfaces::iterator_interface相关的测试程序
- eclipse下面web工程没有src/main目录
- python 简历处理_按照这个方式学Python,老板把垃圾桶里的简历舔回来:月薪50000...
- idea 2020.2 如何设置classpath_开发属于自己的第一款IDEA插件!
- java 获取内存地址_Java 的多态在 JVM 里原来是这样的
- JAVA 第2课 基本程序设计
- Illustrator中文版教程,如何在 Illustrator 中快速连接和修剪路径?
- PostGis+GeoServer+OpenLayers最短路径分析
- FPGA自学:利用D触发器实现分频
- Deepin 深度操作系统安装教程
- xy坐标转换经纬度C语言,(转载)经纬度与西安80,北京54的坐标系转换(C# 实现)...
- Qcom平台,dump解析环境配置
- 图解Navicat连接、操作数据库
- MySQL:Can't create test file XXX.lowe-test
- day12-HTML、CSS与blog页面讲解
- 数据库——操作(mysql)
- 数据库知识点整理(一)
热门文章
- 我是这样变成一个RHCE的(转)
- leetcode 字符串之单词
- vue官方示例_树形视图总结
- esm_info_trans_flag之APN研究
- 【权限维持】Windows自启动映像劫持粘滞键辅助屏保后门WinLogon
- 博客优化 搜索SEO优化 提高搜索量
- springboot采用协同过滤算法的视频推荐系统的设计与实现毕业设计源码261620
- [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example becaus
- 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法
- 微型计算机原理及应用第四版第七章课后答案,郑学坚微型计算机原理及应用第4版笔记和课后习题答案详解...