2010.11.16———android Camera 拍照的两个有关问题
2010.11.16———android Camera 拍照的两个问题
2010.11.16———android Camera 拍照的两个问题
1、setParameters failed 异常信息如下
原因在于
这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报上面的错误 很是郁闷
最好的方法 就是 不设置这两项
2、java.lang.NullPointerException
其实 这个原因 是因为
new MyPictureCallback()还没有执行完成,
下面的代码就开始执行了 这时候 picFile就是空的 所以就会报空指针异常
解决方法 把
呵呵 共同进步 不用谢
看看 按键事件是否捕获到了
2010.11.16———android Camera 拍照的两个问题
1、setParameters failed 异常信息如下
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) ... ...
原因在于
parameters.setPreviewSize()//设置预览照片的大小 parameters.setPictureSize()//设置照片的大小
这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报上面的错误 很是郁闷
最好的方法 就是 不设置这两项
2、java.lang.NullPointerException
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)
其实 这个原因 是因为
@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(); } } }
camera.takePicture(null, null, new MyPictureCallback());这个方法是异步执行的 也就是说
new MyPictureCallback()还没有执行完成,
Intent data = new Intent(); data.putExtra("picFile", picFile.getAbsolutePath()); setResult(100, data); finish();
下面的代码就开始执行了 这时候 picFile就是空的 所以就会报空指针异常
解决方法 把
Intent data = new Intent(); data.putExtra("picFile", picFile.getAbsolutePath()); setResult(100, data); finish(); 放到MyPictureCallback()里面 最后执行即可
1 楼
lenzol
2010-12-07
呵呵 顶下 找了好几天 终于找到解决方案了 谢谢
2 楼
lipeng88213
2010-12-07
lenzol 写道
呵呵 顶下 找了好几天 终于找到解决方案了 谢谢
呵呵 共同进步 不用谢
3 楼
yuchttp
2010-12-08
private final class MyPictureCallback implements PictureCallback{
private String name = "pic";
public void onPictureTaken(byte[] data, Camera camera) {
}
}
在这个函数里面 data.lenth的值为0,可能是什么原因导致的.
private String name = "pic";
public void onPictureTaken(byte[] data, Camera camera) {
}
}
在这个函数里面 data.lenth的值为0,可能是什么原因导致的.
4 楼
lipeng88213
2010-12-08
yuchttp 写道
private final class MyPictureCallback implements PictureCallback{
private String name = "pic";
public void onPictureTaken(byte[] data, Camera camera) {
}
}
在这个函数里面 data.lenth的值为0,可能是什么原因导致的.
private String name = "pic";
public void onPictureTaken(byte[] data, Camera camera) {
}
}
在这个函数里面 data.lenth的值为0,可能是什么原因导致的.
看看 按键事件是否捕获到了