Galaxy Nexus 上的 LED 手电筒可由啥 API 控制?
Posted
技术标签:
【中文标题】Galaxy Nexus 上的 LED 手电筒可由啥 API 控制?【英文标题】:LED flashlight on Galaxy Nexus controllable by what API?Galaxy Nexus 上的 LED 手电筒可由什么 API 控制? 【发布时间】:2012-02-11 04:58:27 【问题描述】:android 的 LED 手电筒 API 问题太多了。我不敢再问一个,但这里是..
使用久经考验的真正 FLASH_MODE_TORCH,我能够对我的三星 Galaxy SII 感到满意并打开 LED 闪光灯。在我朋友的 Galaxy Nexus 上,没有这样的运气。在我其他朋友的 Droid X 上也没有。
我注意到似乎需要大量设备特定的本地 IOCTL 调用。 Galaxy Nexus 是这种情况吗?如何找到编程参考?
我正在做标准的 FLASH_MODE_TORCH/"flash-mode"="torch", startPreview() 链。
有点令人失望的是,这个看似标准的 API 似乎并没有那么普遍。
【问题讨论】:
【参考方案1】:我发现有些设备需要 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_
android:layout_/>
如果您将它放在 RelativeLayout(首选)中,您还可以执行 alignParentLeft/Bottom 将其塞入角落。这种方法适用于我的 Galaxy Nexus,但它是 Droid X 的一个已知问题(手机端)(无论如何都是 .621 更新),并且不适用于我的。很好的答案,timosch!
【讨论】:
我要试一试。谢谢-- 是的,但是我必须在 SurfaceHolder mHolder = preview.getHolder(); 之后添加 mHolder.addCallback(this);这可能也有帮助***.com/questions/10734858/… 如果我想从小部件打开手电筒,我必须怎么做? 您可以将Activity主题设置为@android:style/Theme.Translucent.NoTitleBar
,这样SurfaceView
就不会显示了
一个小通知。 Camera.open 后不需要 setPreviewDisplay。在文档中说 - Important: Pass a fully initialized SurfaceHolder to setPreviewDisplay(SurfaceHolder). Without a surface, the camera will be unable to start the preview.
以上是关于Galaxy Nexus 上的 LED 手电筒可由啥 API 控制?的主要内容,如果未能解决你的问题,请参考以下文章