Camera.Parameters.FLASH_MODE_TORCH для Android 2.1

Я пытаюсь написать приложение, которое требует, чтобы светодиодная вспышка включалась в режим факела. Проблема в том, что Android 2.1 не поддерживает этот режим, и поэтому я пока не могу поддерживать платформу. Не было бы проблемой, но я пишу это для своего жениха, и ее Epic 4G имеет только 2.1. Я нашел несколько примеров кода, которые используют некоторые недокументированные вызовы API и, следовательно, работают с Motorola Droid и т. Д., Но они не работают над Epic. Есть ли у кого-нибудь предложения о том, где искать код, который должен помочь мне заставить это работать?

Я нахожу, что режим факела, как правило, отлично работает на 2.1, но у меня была такая же проблема с Samsung Epic и нашла взломать его.

Глядя на параметры, возвращаемые Camera.getParameters () при запуске на Samsung Epic, я заметил, что флеш-режимы, которые, по его утверждению, поддерживают: flash-mode-values ​​= off, on, auto;

Факел-режим не указан, подразумевая, что он не поддерживается.

Тем не менее, я обнаружил, что эта модель все равно согласится с этим режимом и включит светодиод! Плохая новость заключалась в том, что при более позднем включении режима вспышки в автоматическом или выключенном состоянии светодиод все еще горит! Он не будет отключен, пока вы не вызовете Camera.release ().

Думаю, именно поэтому Samsung не включил его в список поддерживаемых!?!

Итак … метод, который я использую для переключения факела в классе CameraHelper, …

/*** * Attempts to set camera flash torch/flashlight mode on/off * @param isOn true = on, false = off * @return boolean whether or not we were able to set it */ public boolean setFlashlight(boolean isOn) { if (mCamera == null) { return false; } Camera.Parameters params = mCamera.getParameters(); String value; if (isOn) // we are being ask to turn it on { value = Camera.Parameters.FLASH_MODE_TORCH; } else // we are being asked to turn it off { value = Camera.Parameters.FLASH_MODE_AUTO; } try{ params.setFlashMode(value); mCamera.setParameters(params); String nowMode = mCamera.getParameters().getFlashMode(); if (isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_TORCH)) { return true; } if (! isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_AUTO)) { return true; } return false; } catch (Exception ex) { MyLog.e(mLOG_TAG, this.getClass().getSimpleName() + " error setting flash mode to: "+ value + " " + ex.toString()); } } 

Действия, которые используют это, называют это следующим …

 private void toggleFlashLight() { mIsFlashlightOn = ! mIsFlashlightOn; /** * hack to fix an issue where the Samsung Galaxy will turn torch on, * even though it says it doesnt support torch mode, * but then will NOT turn it off via this param. */ if (! mIsFlashlightOn && Build.MANUFACTURER.equalsIgnoreCase("Samsung")) { this.releaseCameraResources(); this.initCamera(); } else { boolean result = mCamHelper.setFlashlight(mIsFlashlightOn); if (! result) { alertFlashlightNotSupported(); } } } 

Магия, которая делает эту работу в releaseCameraResources (), заключается в том, что она вызывает Camera.release () …. а затем я должен повторно инициализировать все свои камеры для устройств Samsung.

Не очень, но, похоже, работает на множество пользователей.

Обратите внимание, что у меня есть отчет о режиме факела, который не работает вообще с этим кодом на Nexus one, но ему удалось его вникнуть. Это определенно работает на HTC EVO и Samsung Epic.

Надеюсь это поможет.

В моем случае для устройств Samsung мне нужно было установить режим фокусировки на бесконечность, и он начал работать

 params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); mCamera.setParameters(params); mCamera.startPreview();