Arhn - архитектура программирования

Код предварительного просмотра камеры Android не работает с ошибкой Nexus7 -surfaceView

Я создал приложение камеры для Android с помощью руководства по коду камеры Android http://developer.android.com/guide/topics/media/camera.html#custom-camera. Это работает для XperiaZ - LgoptimusBlack - GalaxyNexus4 и некоторых других устройств. Но с Nexus-7 android 4.2.2 он выдал мне ошибку 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)

  • Не могли бы вы также опубликовать код? 16.04.2013

Ответы:


1

Nexus 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, если нет задней камеры:

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

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

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

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

Удачи.

16.04.2013
  • Рад, что смог помочь. Принять мой ответ? 16.04.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..