LEDフラッシュをトーチモードにする必要があるアプリを作成しようとしています。問題は、Android 2.1がこのモードをサポートしていないため、プラットフォームをまだサポートできないことです。問題にはなりませんが、私は婚約者のために書いています。彼女のEpic4Gには現在2.1しかありません。文書化されていないAPI呼び出しを使用しているため、Motorola Droidなどで機能するコードサンプルをいくつか見つけましたが、Epicでは機能しません。誰かが私がこれを機能させるのに役立つはずのコードを見つけるためにどこを探すべきかについていくつかの提案がありますか?
2 に答える
トーチモードは一般的に2.1で正常に機能していることがわかりましたが、Samsung Epicでも同じ問題が発生し、その周りにハックが見つかりました。
Samsung Epicで実行したときにCamera.getParameters()によって返されるパラメーターを見ると、サポートしていると主張するフラッシュモードが次のとおりであることがわかりました。flash-mode-values= off、on、auto;
torch-modeはリストされていません。これは、サポートされていないことを意味します。
ただし、このモデルは引き続きそのモードを受け入れ、LEDをオンにすることがわかりました。悪いニュースは、後でフラッシュモードを自動またはオフに戻したときに、LEDがまだ点灯したままになったことです。Camera.release()を呼び出すまでオフになりません。
サムスンがサポートされているリストにそれを含めないのはそのためだと思います!?!
つまり...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のこのコードではトーチモードがまったく機能しないという報告がありますが、それを掘り下げることができていることに注意してください。それは間違いなくHTCEVOとSamsungEpicで動作します。
お役に立てれば。
私のSamsungデバイスの場合、フォーカスモードを無限大に設定する必要があり、それが機能し始めました
params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY);
mCamera.setParameters(params);
mCamera.startPreview();