我的第一篇博客:关于android的Camera在takePicture()时不回调onPictureTaken()方法

在看书学习中,简单用到camera API去拍摄照片,但是在小米Note上运行时,卡在了拍摄界面,不动了,没有报错信息,可以知道是回调了Camera.ShutterCallback中的onShutter()方法,因为放了个进度条在显示,也有卡嚓声,后来各种谷歌和百度,看了很多页,改各个步骤也不能解决,后来通过搜索“不回调onPictureTaken()”关键字,看到有人遇到同样的问题,见地址:http://www.2cto.com/kf/201504/387110.html

经过修改,果然是parameters.setPreviewSize()设置了最大的Size的原因,并不是所有手机都是如此,红米就不会,问题如上面网址中所说,需要将setPreviewSize()设置成屏幕近似分辨率,而并不是设置成最大。

Camera.Parameters parameters=mCamera.getParameters();
//设置近似屏幕的分辨率
Size s=getCurrentScreenSize(parameters.getSupportedPreviewSizes());
parameters.setPreviewSize(s.width, s.height);
Size s2=getBestPictureSize(parameters.getSupportedPictureSizes(),s);
parameters.setPictureSize(s2.width,s2.height);
mCamera.setParameters(parameters);
具体的getCurrentScreenSize()和getBestPictureSize()是参考他的代码的:http://www.2cto.com/kf/201504/387110.html

其中里面,我用到的设备屏幕分辨率的方法如下:

DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
displayMetrics.widthPixels , displayMetrics.heightPixels
折腾了一整天+半天,终于解决了。

自从大学接触计算机以来,09年入学,13年毕业,干了两年测试,15年辞职在家学android,这是第一篇博客,特此小小mark一下!

你可能感兴趣的:(android开发)