Camera.Parameters.FLASH_MODE_TORCH замена для Android 2.1 - PullRequest
7 голосов
/ 07 октября 2010

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

Ответы [ 2 ]

9 голосов
/ 15 октября 2010

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

Просмотр параметров, возвращаемых Camera.getParameters ()при запуске на Samsung Epic я заметил, что flash-режимами, которые он поддерживает, являются: 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.

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

2 голосов
/ 13 января 2012

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

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