我发现有些设备需要一个SurfaceView来打开LED。
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;
}
的surfaceview必须是可见的,android:visibility="invisible"
或0的高度和宽度,将无法正常工作。不幸的是,我没有找到一个很好的解决方案来隐藏它,所以我 只是给它一个1x1dip的大小,并将其放置在一个按钮之下..
**(要扩大上述段落[没有足够的代表回复,但是觉得这是非常有用])某处在你的当前内容查看XML,你想:
<SurfaceView
android:id="@+id/PREVIEW"
android:layout_width="1dip"
android:layout_height="1dip"/>
如果你有它里面的RelativeLayout(首选),你也可以做alignParentLeft /底部掖它在一个角落里。这种方法适用于我的Galaxy Nexus,但它是Droid X的一个已知问题(手机端)(无论如何,.621更新),并且不适用于我的。很好的回答,timosch!
我要给这个镜头。谢谢 - – Malachi 2012-02-24 08:17:26
这个工作吗?对任何人? – 2012-03-02 10:07:48
这是否奏效? – Ivan 2012-03-21 13:44:09