android Camera 拍照的两个问题
生活随笔
收集整理的這篇文章主要介紹了
android Camera 拍照的两个问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2010.11.16———android Camera 拍照的兩個問題?
1、setParameters failed 異常信息如下?
Java代碼?? 11-16?11:21:33.902:?WARN/System.err(27218):?java.lang.RuntimeException:?setParameters?failed?? 11-16?11:21:33.902:?WARN/System.err(27218):?????at?android.hardware.Camera.native_setParameters(Native?Method)?? ...?? ...??
原因在于?
Java代碼?? parameters.setPreviewSize()//設置預覽照片的大小?? parameters.setPictureSize()//設置照片的大小??
這兩個屬性 如果這兩個屬性設置的和真實手機的不一樣時,就會報上面的錯誤 很是郁悶?
最好的方法 就是 不設置這兩項?
2、java.lang.NullPointerException?
Java代碼?? 11-16?13:33:39.801:?ERROR/AndroidRuntime(5676):?FATAL?EXCEPTION:?main?? 11-16?13:33:39.801:?ERROR/AndroidRuntime(5676):?java.lang.NullPointerException?? 11-16?13:33:39.801:?ERROR/AndroidRuntime(5676):?????at?com.huitu.project.PicActivity.onKeyDown(PicActivity.java:87)?? 11-16?13:33:39.801:?ERROR/AndroidRuntime(5676):?????at?android.view.KeyEvent.dispatch(KeyEvent.java:1257)?? 11-16?13:33:39.801:?ERROR/AndroidRuntime(5676):?????at?android.app.Activity.dispatchKeyEvent(Activity.java:2075)??
其實 這個原因 是因為?
Java代碼?? @Override?? ????public?boolean?onKeyDown(int?keyCode,?KeyEvent?event)?{?? ????????if(event.getRepeatCount()==0?&&?camera!=null){?? ????????????switch?(keyCode)?{?? ????????????case?KeyEvent.KEYCODE_SEARCH://按下的是搜索鍵?? ????????????????camera.autoFocus(null);//自動對焦?? ????????????????return?true;?? ?? ????????????case?KeyEvent.KEYCODE_CAMERA:?? ????????????case?KeyEvent.KEYCODE_DPAD_CENTER:?? ????????????????camera.takePicture(null,?null,?new?MyPictureCallback());?? ????????????????Intent?data?=?new?Intent();?? ????????????????data.putExtra("picFile",?picFile.getAbsolutePath());?? ????????????????setResult(100,?data);?? ????????????????finish();?? ????????????????return?true;?? ????????????}?? ????????}?? ????????return?super.onKeyDown(keyCode,?event);?? ????}?? ?? private?final?class?MyPictureCallback?implements?PictureCallback{?? ????????private?String?name?=?"pic";?? ????????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{?? ?????????????? ????????????try?{?? ????????????????Bitmap?bitmap?=?BitmapFactory.decodeByteArray(data,?0,?data.length);?? ????????????????picFile?=?new?File(Environment.getExternalStorageDirectory(),?name?+?System.currentTimeMillis()+".jpg");?? ????????????????FileOutputStream?outStream?=?new?FileOutputStream(picFile);?? ????????????????bitmap.compress(CompressFormat.JPEG,?100,?outStream);?? ????????????????outStream.close();?? ????????????????//camera.startPreview();?? ????????????}?catch?(Exception?e)?{?? ????????????????e.printStackTrace();?? ????????????}?? ????????}?? ?????????? ????}??
Java代碼?? camera.takePicture(null,?null,?new?MyPictureCallback());?? 這個方法是異步執行的 也就是說?
new MyPictureCallback()還沒有執行完成,?
Java代碼?? Intent?data?=?new?Intent();?? data.putExtra("picFile",?picFile.getAbsolutePath());?? setResult(100,?data);?? finish();??
下面的代碼就開始執行了 這時候 picFile就是空的 所以就會報空指針異常?
解決方法 把?
Java代碼?? Intent?data?=?new?Intent();?? data.putExtra("picFile",?picFile.getAbsolutePath());?? setResult(100,?data);?? finish();?? ?? 放到MyPictureCallback()里面?最后執行即可??
因為項目中有用到相機拍照功能,所以研究了下camera。
在實踐的過程中發現兩個問題:
1、用模擬器啟動不了camera,提示:java.lang.runtimeException:setparameters failed.....
????因為parameters.setPictureSize(320, 480)(設置分辨率)的參數有誤,
????如果不清楚分辨率可以卻掉這句話,再運行就OK 了。
????如果真的想看分辨率可以看logcat日志上面有寫:getParameters(....)里面就是一些相關的參數。
2、連續兩次以上的拍照,會出現異常:java.lang.RuntimeException:fail to connect to camera service。
????因為沒有對camera進行釋放,或者說系統有自動釋放功能但是還沒有被處理。可以通過手動釋放:
????/**
???? * 停止預覽
???? */
????????@Override
????????public void surfaceDestroyed(SurfaceHolder holder) {
????????????????// TODO Auto-generated method stub
????????????????mCamera.stopPreview();
???????????????mCamera.release();//加上這句,就OK!
????????????????mCamera=null;
????????????????
????????}
1、setParameters failed 異常信息如下?
Java代碼??
原因在于?
Java代碼??
這兩個屬性 如果這兩個屬性設置的和真實手機的不一樣時,就會報上面的錯誤 很是郁悶?
最好的方法 就是 不設置這兩項?
2、java.lang.NullPointerException?
Java代碼??
其實 這個原因 是因為?
Java代碼??
Java代碼??
new MyPictureCallback()還沒有執行完成,?
Java代碼??
下面的代碼就開始執行了 這時候 picFile就是空的 所以就會報空指針異常?
解決方法 把?
Java代碼??
因為項目中有用到相機拍照功能,所以研究了下camera。
在實踐的過程中發現兩個問題:
1、用模擬器啟動不了camera,提示:java.lang.runtimeException:setparameters failed.....
????因為parameters.setPictureSize(320, 480)(設置分辨率)的參數有誤,
????如果不清楚分辨率可以卻掉這句話,再運行就OK 了。
????如果真的想看分辨率可以看logcat日志上面有寫:getParameters(....)里面就是一些相關的參數。
2、連續兩次以上的拍照,會出現異常:java.lang.RuntimeException:fail to connect to camera service。
????因為沒有對camera進行釋放,或者說系統有自動釋放功能但是還沒有被處理。可以通過手動釋放:
????/**
???? * 停止預覽
???? */
????????@Override
????????public void surfaceDestroyed(SurfaceHolder holder) {
????????????????// TODO Auto-generated method stub
????????????????mCamera.stopPreview();
???????????????mCamera.release();//加上這句,就OK!
????????????????mCamera=null;
????????????????
????????}
轉載于:https://www.cnblogs.com/sfshine/archive/2012/04/24/2524485.html
總結
以上是生活随笔為你收集整理的android Camera 拍照的两个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020二类电商行业广告投放概况
- 下一篇: Quartus 使用tcl分配管脚