2013-04-16 1 views
0

Я создал приложение для камеры для Android с инструкцией по кодированию камеры для Android. http://developer.android.com/guide/topics/media/camera.html#custom-camera. Он работает для XperiaZ - LgoptimusBlack-GalaxyNexus4 и некоторых других устройств. Но с Nexus-7 android 4.2.2 он дал мне ошибку поверхностного обзора, он не может создать предварительный просмотр камеры на поверхности. Я пробовал другие образцы, но без результатов. вот LogCat:Код камеры для предварительного просмотра камеры не работает с ошибкой Nexus7 -surfaceView

FATAL EXCEPTION: main 
     java.lang.NullPointerException 
    at com.test.mycamera.CameraPreview.surfaceCreated(CameraPreview.java:33) 
at android.view.SurfaceView.updateWindow(SurfaceView.java:569) 
at android.view.SurfaceView.access$000(SurfaceView.java:86) 
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:174) 
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:680) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1842) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
at android.view.Choreographer.doFrame(Choreographer.java:532) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 
+0

Не могли бы вы также отправить код? – Shade

ответ

1

Нексус 7 имеет только переднюю камеру.

Код Google не справляется с этим фактом. Он использует:

public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 

Но тогда:

mCamera = getCameraInstance(); 

И не проверить работает ли.

Проблема заключается в том, что Camera.open() вернется null если нет камеры заднего вида:

Создает новый объект камеры для доступа к первой задней стороне камеры на устройстве. Если устройство не имеет обратную камеру, это возвращает значение null.

По иронии судьбы, Camera.open(0); должен работать, но слепо выбирать камеру с ID 0 определенно не то, что вы хотите в реальном продукте. Кроме того, обратите внимание на следующее который указан для open(int cameraId), но не для open():

Внимание: На некоторых устройствах, этот метод может занять много времени, чтобы закончить. Лучше всего вызвать этот метод из рабочего потока (возможно, используя AsyncTask), чтобы избежать блокировки потока пользовательского интерфейса основного приложения.

Кроме того, вы не обязательно хотите использовать фрагменты кода Google в реальных продуктах из-за их, хм, уровня зрелости. Как мы только что видели.

Удачи.

+0

спасибо, он работает – bob

+0

Рад, что я мог помочь. Примите мой ответ? –

 Смежные вопросы

  • Нет связанных вопросов^_^