android系统相机的使用、及解决拍照闪退的问题
2016-05-06 14:18
736 查看
相机已成为android手机不可或缺的一部分,我们在开发可能也会涉及到关于相机的使用,以及在使用中会遇到一些问题(重点),下面把我个人的一点经验贴出来,仅供大家参考学习。
最简单的方式直接调用系统相机进行拍照,虽然能满足拍照的要求,但拍照的功能和界面却局限系统相机的样子,于是我们这时根据Camera API实现自己的拍照和摄像程序,当然这并不是我想说重点,今天的重点在于开发中不同型号手机调用系统相机拍完照出现闪退的问题
一、调用安卓系统相机拍照
首先应该添加权限:
通过Intent 打开系统相机
在onActivityResult中,通过相机返回意图intent.get("data") 取得拍照的图片
二.系统相机拍照方式---解决系统相机拍照闪退
上面的代码,实现了调用系统相机,但是经过我在测试数10台手机之后发现,红米和三星出现拍完照后返回时,黑屏闪退。测试结果说明,该方法只试用于部分手机。
观察错误信息,提示onActivityResult 中空指针异常,相机拍照返回的 Intent data这个参数为空无法取出刚刚拍照的Bitmap,研究了一下,应该是不同手机厂商在系统定制时,隐藏了拍照返回意图。厂商系统定制我们不能修改,只能采取另外的方式来保存照片。针对返回意图为空的问题,解决办法如下:
通过把照片保存在指定路径,完成后通过路径取出
拍照完成返回时,在onActivityResult中,通过指定文件的绝对路径,获得拍照的图片
三、使用自定义路径拍照闪退问题
如果使用方法二拍照依然部分手机出现闪退的情况,观察打印的错误信息,依然NullPointerException,这个问题相对来说也比较简单,但第一次遇到也把我困住了一会,异常信息我就不贴出来了,错误的原因是这样的:
当我们 通过 startActivityForResult(intent, OPEN_RESULT); 打开系统相机时,部门手机由于系统优化的原因,会把当前页面的成员变量回收,当拍完照片返回时,在onActivityResult方法中是要通过照片路径来获得Bitmap,而这种情况下保存照片路径的mPictureFile指向的字符串已经被回收,mPictureFile值就为空,导致产生空指针异常而闪退。解决办法是在Activity中加上onSaveInstanceState生命周期方法,保证对象在被系统回收之前能够先以hashMap的形式保存下来,当返回时再从onRestoreInstanceState方法中恢复出来
下面把整个应用程序代码写出来,结合Activity的生命周期方法,可以更好的观察理解这个问题:
最简单的方式直接调用系统相机进行拍照,虽然能满足拍照的要求,但拍照的功能和界面却局限系统相机的样子,于是我们这时根据Camera API实现自己的拍照和摄像程序,当然这并不是我想说重点,今天的重点在于开发中不同型号手机调用系统相机拍完照出现闪退的问题
一、调用安卓系统相机拍照
首先应该添加权限:
上面的代码,实现了调用系统相机,但是经过我在测试数10台手机之后发现,红米和三星出现拍完照后返回时,黑屏闪退。测试结果说明,该方法只试用于部分手机。
观察错误信息,提示onActivityResult 中空指针异常,相机拍照返回的 Intent data这个参数为空无法取出刚刚拍照的Bitmap,研究了一下,应该是不同手机厂商在系统定制时,隐藏了拍照返回意图。厂商系统定制我们不能修改,只能采取另外的方式来保存照片。针对返回意图为空的问题,解决办法如下:
通过把照片保存在指定路径,完成后通过路径取出
如果使用方法二拍照依然部分手机出现闪退的情况,观察打印的错误信息,依然NullPointerException,这个问题相对来说也比较简单,但第一次遇到也把我困住了一会,异常信息我就不贴出来了,错误的原因是这样的:
当我们 通过 startActivityForResult(intent, OPEN_RESULT); 打开系统相机时,部门手机由于系统优化的原因,会把当前页面的成员变量回收,当拍完照片返回时,在onActivityResult方法中是要通过照片路径来获得Bitmap,而这种情况下保存照片路径的mPictureFile指向的字符串已经被回收,mPictureFile值就为空,导致产生空指针异常而闪退。解决办法是在Activity中加上onSaveInstanceState生命周期方法,保证对象在被系统回收之前能够先以hashMap的形式保存下来,当返回时再从onRestoreInstanceState方法中恢复出来
下面把整个应用程序代码写出来,结合Activity的生命周期方法,可以更好的观察理解这个问题:
相关文章推荐
- Android货币单位获取方法
- Androidstudio Git (对已有项目提交和从远程获取项目到本地)
- Android绘制流程
- Android动画合集
- Android PopuWindow 和 软键盘共存的设置
- Android相机开发那些坑
- Android:利用SharedPreferences实现自动登录
- Android的IPC方式
- adb 发送broadcast广播
- Android Stadio常用快捷键及基本设置
- 【Android】15、活动的生命周期
- Android开发生僻却实用的知识点
- 一次搞定 Android 基本动画 大清理
- Volley直接设置POST包体
- Android ListView封装类
- Android—自定义标题栏的实现及遇见的问题解决
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
- Android让Fragment加载到Activity中
- android studio无法关联源码
- android SystemProperty系统属性分析