Установка параметров.FLASH_MODE_TORCH не работает на Droid X 2.3

Я пишу приложение, которое устанавливает режим вспышки на факел. Я тестировал приложение на своем Droid X, и светодиод не загорается. Я попробовал это на Droid Incredible, и он работал нормально. Я не могу понять, в чем проблема. Вот часть моего кода для включения режима факела.

    Camera mCamera = Camera.open();
    Camera.Parameters params = mCamera.getParameters();
    if(params.getFlashMode() != null){
        params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    }
    mCamera.setParameters(params);

Я добавил mCamera.startPreview(); потому что я читал, что это должно иметь значение, но это не так. Я также составил список доступных режимов вспышки и отобразил их на экране, чтобы убедиться, что у моего Droid X есть режим фонарика, и он был в списке. Я даже создал новое приложение из кода, найденного в Интернете, которое включает и выключает светодиодную вспышку с помощью кнопки. Опять же, он отлично работал на Droid Incredible, но не на Droid X. Что-то мне не хватает, чтобы заставить это работать на Droid X, или это может быть что-то с Gingerbread? Droid X работает под управлением Gingerbread, а Droid Incredible — под управлением FroYo.


person Matt    schedule 30.07.2011    source источник


Ответы (4)


При настройке FLASH_MODE_TORCH есть несколько особенностей.

Часто вам нужно запустить предварительный просмотр камеры:

Camera mCamera = Camera.open();
mCamera.startPreview();
Camera.Parameters params = mCamera.getParameters();
if(params.getFlashMode() != null){
    params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
}
mCamera.setParameters(params);

Это может решить эту проблему на некоторых телефонах, другие телефоны также требуют, чтобы предварительный просмотр отображался в SurfaceView. Это можно сделать, внедрив интерфейс SurfaceHolder.Callback в свою активность. См. пример здесь< /а>.

person Paul Ferguson    schedule 17.01.2012
comment
Это приведет к сбою на некоторых передних камерах, которые не поддерживают TORCH. По крайней мере, он должен быть окружен try catch. - person Cynichniy Bandera; 18.09.2013

Возможно, Droid X не поддерживает режим факела. Попробуйте что-то вроде этого:

        List<String> pList = camera.getParameters().getSupportedFlashModes();

        if (pList.contains(Parameters.FLASH_MODE_TORCH))
            parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);


         camera.setParameters(parameters);
person ajacian81    schedule 22.08.2011

См. ошибку 191453:

SurfaceTexture mDummy = new SurfaceTexture(1); // any int argument will do
camera.setPreviewTexture(mDummy);
camera.startPreview();
person YiFeng    schedule 01.04.2017

Единственное, что я нашел, что работает на Droid X, - это код, представленный Сиддхпурой Амитом на полпути вниз по странице в этом ответе Использовать фонарик камеры в Android. Он проверяет производителя и проверяет, содержит ли он строку «motorola». Если да, то у него есть специальный код, который может включать и выключать светодиодную вспышку камеры. Я могу убедиться, что это работает, поскольку у меня есть Motorola Droid X.

person Rick Stranberg    schedule 31.05.2013