Установка параметров.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.

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 в вашей деятельности. Смотрите пример здесь.

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

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

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


         camera.setParameters(parameters);

См. Выпуск 191453:

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

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

Другие вопросы по тегам