您的位置:首页 > 其它

真正解决三星等手机拍照问题

2015-11-23 17:10 337 查看
相信大家在Android 开发的过程中肯定会遇到拍照的问题,然而利用Android 系统自带的相机肯定是我们的首选 但是在开源力量的强大之下也会有一些 与本身系统不尽一致的存在。例如: 个别三星手机拍照无法正常显示。

1、通过拍照测试 发现是因为手机屏幕旋转造成页面异常关闭

一般情况我们在 AndroidManifest 文件中配置activity 的 screenOrientation="portrait" 来让屏幕只有竖屏显示,但是这个设置在三星手机里无法起到作用。

2、既然无法通过配置来达到我们禁止屏幕旋转的问题,那么我们分析一下activity在异常时生命周期: onSaveInstanceState 总是执行了,而onRestoreInstanceState确不是每次被执行。

onSaveInstanceState 代表当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState() 就回被执行,除非是被用户主动销毁的,例如当用户按back键时

onRestoreInstanceState 则代表这个“确实”被销户了才调用。

所以 我们可以通过重写onSaveInstanceState 方法来保存一下拍照图片路径

2.1、通过设置拍照图片路径名字启动系统相机

/**

* 启动相机拍照 startCamera

*

* @Title: startCamera

* @throws

*/

private void toImageFromCamera() {

imgName = String.valueOf(System.currentTimeMillis());

Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

File dir = new File(FILEPATH);

if (!dir.exists()) {

dir.mkdirs();

}

File file = new File(dir, imgName + ".jpg");

localCameraPath = file.getPath();

Uri imageUri = Uri.fromFile(file);

openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(openCameraIntent, CrequestCode);

}

2.2、设置图片拍照后回调数据

正常应该返回 onActivityResult 中,但是因为异常无法正常进入,所以在onSaveInstanceState() 方法中利用bundle保存 localCameraPath 路径(拍照时设置的)

2.3、在activity重建时 OnCreate() 方法中 判断 savedInstanceState 是否为 null

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.selectpicture_dialog);

if (savedInstanceState != null) {

saveImgUrl = savedInstanceState.getString(LOCALCAMERAPATH);

//url对应的图片进行压缩处理

saveImgUrl = HandleImg(saveImgUrl);

mls.OnImgPath(saveImgUrl);

}else {

InitView();

}

}

这样就拿到了 当初拍照时的图片路径,然后对图片进行处理就可以了!~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: