私が見つけたのは、一部のデバイスは LED をオンにするために SurfaceView を必要とするということです。
SurfaceView preview = (SurfaceView) findViewById(R.id.PREVIEW);
SurfaceHolder mHolder = preview.getHolder();
mHolder.addCallback(this);
Camera mCamera = Camera.open();
mCamera.setPreviewDisplay(mHolder);
// Turn on LED
Parameters params = mCamera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(params);
mCamera.startPreview();
...
// Turn off LED
Parameters params = mCamera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
mCamera.stopPreview();
mCamera.release();
あなたのアクティビティは SurfaceHolder.Callback を実装する必要があります:
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {}
public void surfaceCreated(SurfaceHolder holder) {
mHolder = holder;
mCamera.setPreviewDisplay(mHolder);
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mHolder = null;
}
サーフェス ビューが表示されている必要があります。そうしandroid:visibility="invisible"
ないと、高さと幅が 0 では機能しません。残念ながら、それを隠す良い解決策が見つからなかったので、サイズを 1x1dip にして、ボタンの下に配置しました..
**(上記の段落を拡張するには [返信するのに十分な担当者がいませんが、役に立ったと感じました]) 現在のコンテンツ ビューの XML のどこかで、次のことを行います。
<SurfaceView
android:id="@+id/PREVIEW"
android:layout_width="1dip"
android:layout_height="1dip"/>
RelativeLayout (推奨) 内にある場合は、alignParentLeft/Bottom を実行してコーナーに押し込むこともできます。この方法は私のGalaxy Nexusでは機能しますが、Droid X(とにかく.621アップデートを使用)の既知の問題(電話側)であり、私のものでは機能しません. 素晴らしい答え、ティモッシュ!