Galaxy Nexus上的LED手电可以通过什么API控制?

Android的这么多LED手电筒API问题。 我不敢再问了,但是这里呢..

使用经过validation的真正的FLASH_MODE_TORCH,我能够达到我的三星Galaxy SII的满意度,并打开LED闪光灯。 在我朋友的Galaxy Nexus上,没有这样的运气。 也不在我的其他朋友的Droid X.

我注意到一个不是微不足道的设备数量似乎需要特定的本地IOCTL调用。 这是Galaxy Nexus的情况吗? 我如何find一个参考编程呢?

我正在做标准的FLASH_MODE_TORCH /“flash-mode”=“torch”,startPreview()链。

这种看似标准的API毕竟看起来并不那么普遍,令人失望。

我发现有些设备需要一个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的高度和宽度将不起作用。 不幸的是,我没有find一个很好的解决scheme来隐藏它,所以我只是给它一个1x1dip的大小,并将其放置在一个button下面。

**(要扩展上面的段落[没有足够的代表回复,但觉得它是有用的])在您当前的内容视图的XML中的某处,你想要:

 <SurfaceView android:id="@+id/PREVIEW" android:layout_width="1dip" android:layout_height="1dip"/> 

如果你有一个RelativeLayout(首选),你也可以做alignParentLeft / Bottom把它放在一个angular落里。 这种方法适用于我的Galaxy Nexus,但它是一个已知的问题(手机端)的Droid X(与.621更新,无论如何),并不适用于我的。 很好的回答,timosch!