#java #android #camera
#java #Android #камера
Вопрос:
Привет, я создаю API для управления камерой в Android. Я выполняю функцию для получения изображений, но у меня возникает эта ошибка в logcat при попытке создания изображения:
06-18 09:25:44.319: E/AndroidRuntime(2918): FATAL EXCEPTION: main
06-18 09:25:44.319: E/AndroidRuntime(2918): Process: org.gradiant.democamera, PID: 2918
06-18 09:25:44.319: E/AndroidRuntime(2918): java.lang.IllegalStateException: Could not execute method of the activity
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.view.View$1.onClick(View.java:3823)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.view.View.performClick(View.java:4438)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.view.View$PerformClick.run(View.java:18422)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.os.Handler.handleCallback(Handler.java:733)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.os.Handler.dispatchMessage(Handler.java:95)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.os.Looper.loop(Looper.java:136)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.app.ActivityThread.main(ActivityThread.java:5001)
06-18 09:25:44.319: E/AndroidRuntime(2918): at java.lang.reflect.Method.invokeNative(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918): at java.lang.reflect.Method.invoke(Method.java:515)
06-18 09:25:44.319: E/AndroidRuntime(2918): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-18 09:25:44.319: E/AndroidRuntime(2918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-18 09:25:44.319: E/AndroidRuntime(2918): at dalvik.system.NativeStart.main(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918): Caused by: java.lang.reflect.InvocationTargetException
06-18 09:25:44.319: E/AndroidRuntime(2918): at java.lang.reflect.Method.invokeNative(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918): at java.lang.reflect.Method.invoke(Method.java:515)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.view.View$1.onClick(View.java:3818)
06-18 09:25:44.319: E/AndroidRuntime(2918): ... 11 more
06-18 09:25:44.319: E/AndroidRuntime(2918): Caused by: java.lang.RuntimeException: takePicture failed
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.hardware.Camera.native_takePicture(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.hardware.Camera.takePicture(Camera.java:1245)
06-18 09:25:44.319: E/AndroidRuntime(2918): at android.hardware.Camera.takePicture(Camera.java:1190)
06-18 09:25:44.319: E/AndroidRuntime(2918): at org.gradiant.camara.CameraAcquisition.GetImage(CameraAcquisition.java:146)
06-18 09:25:44.319: E/AndroidRuntime(2918): at org.gradiant.democamera.MainActivity.getFrame(MainActivity.java:30)
06-18 09:25:44.319: E/AndroidRuntime(2918): ... 14 more
Это мой код для этого:
public void GetImage() {
mCamera = StartCapture();
mCamera.startPreview();
mCamera.takePicture(null, null, new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
}
});
}
public Camera StartCapture() {
int cameraCount = 0;
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx ) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == camera_used) {
try {
cam = Camera.open(camIdx);
android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(camIdx, info);
int rotation = ((Activity) context_class)
.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0:
degrees = 0;
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_180:
degrees = 180;
break;
case Surface.ROTATION_270:
degrees = 270;
break;
}
int resu<
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees 360) % 360;
}
cam.setDisplayOrientation(result);
// other options, as resolution, format, etc
Camera.Parameters params = mCamera.getParameters();
mCamera.setParameters(params);
} catch (RuntimeException e) {
}
}
}
return cam;
}
В чем проблема? Что я делаю не так?
Спасибо
Редактировать:
Согласно комментариям, это две конфликтующие строки:
В MainActivity:
camera.GetImage();
При вызове метода и в методе:
mCamera.takePicture(null, null, new PictureCallback()
Комментарии:
1. дважды щелкните по этой последней строке в org.gradiant.democamera. MainActivity.getFrame(MainActivity.java:30) и посмотрите, в какой строке возникла проблема в вашей деятельности
2. пожалуйста, отправьте строку с номером 30 в MainActivity.java и строка 146 в CameraAcquisition.java . согласно вашему logcat, они, похоже, связаны с проблемой…
3. это когда в вызове getImage(); функция, конкретно строка mCamera.startPreview();