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 控制?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 上的 Android 手电筒

手电筒的开关结构

三星 Galaxy J1 4G 上的 webRTC 应用程序崩溃

提供~五功能手电筒LED驱动 ICAH6700

在 Galaxy Nexus 上远程调试 Chrome

Galaxy tab/nexus 7 上 chrome/mozilla 中的视口、目标密度 dpi、像素比行为