2016-12-20 6 views
2

Я получаю много сообщений о сбоях в crashlytics, где объект Camera имеет значение null. Это не происходит со мной во время тестирования и использования приложения.Camera.open возвращает null иногда

Fatal Exception: java.lang.RuntimeException: Unable to resume activity {packageName/activityName}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.Camera$Parameters android.hardware.Camera.getParameters()' on a null object reference 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3026) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3057) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 
    at android.app.ActivityThread.access$800(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5349) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.Camera$Parameters android.hardware.Camera.getParameters()' on a null object reference 
    at activityName.o(SourceFile:612) 
    at activityName.u(SourceFile:772) 
    at activityName.onResume(SourceFile:539) 
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1241) 
    at android.app.Activity.performResume(Activity.java:6106) 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3015) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3057) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 
    at android.app.ActivityThread.access$800(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5349) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 

Аварийное происшествие происходит в camera.getParameters().

Так это в основном потому, что камера по какой-то причине не может подключиться в данный момент?

Это похоже на ошибку "Can't connect to camera.", вы попадаете в приложение камеры по телефону?

Надеюсь, что кто-то может пролить свет на это и поделиться некоторыми способами справиться с этим.

+0

Из вашего журнала это выглядит так, что объект Camera является нулевым, потому что действие (из которого объект камеры было полем) было уничтожено и воссоздано. Это может произойти, если конфигурация активности изменена (как правило, портретная в альбомную). –

+0

@AlexCohn Эта активность не разрушается при изменении ориентации, потому что я добавил атрибут configChange в манифест, чтобы это не могло быть причиной. –

+0

Ваша активность падает в onResume(), на линии 539. Это происходит потому, что объект камеры в этот момент равен нулю. Хотя вы считаете, что позаботились обо всех возможных сбоях, некоторые особенности ОС Android нашли некоторые невозможные. Невозможно предложить исправление без исходного кода. –

ответ

1

1) Вы инициализируете камеру как?

camera = camera.open(); 

2) Были ли у вас разрешения на использование камеры?

<uses-permission android:name="android.permission.CAMERA"/> 

3) Убедитесь, что вы не делаете это после того, как сразу же открытия камеры:

camera = null; 

4) Попробуйте установить ориентацию камеры в портретном режиме явно Manifest.xml

5) Если вы используют Marshmellow, вам понадобятся разрешения во время выполнения для доступа к камере.

+0

Выполнение всех вышеперечисленных. –

+0

попробуйте использовать Camera.open (0) .... – MezzyDroid

+0

Крушение не происходит постоянно. Это решение подразумевает, что это происходит постоянно на определенных устройствах, но это не так. У многих пользователей есть nexus 5, и приложение работает нормально, но есть один пользователь с nexus 5, который столкнулся с этой проблемой. –

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