我想在Android中以编程方式打开前闪光灯(不是相机预览)。我在谷歌上搜索了一下,但我找到的帮助把我转到了这个页面

有人有链接或示例代码吗?


当前回答

在Marshmallow和上面的例子中,CameraManager的“setTorchMode()”似乎是答案。这对我来说很管用:

 final CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
 CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback() {
     @Override
     public void onTorchModeUnavailable(String cameraId) {
         super.onTorchModeUnavailable(cameraId);
     }

     @Override
     public void onTorchModeChanged(String cameraId, boolean enabled) {
         super.onTorchModeChanged(cameraId, enabled);
         boolean currentTorchState = enabled;
         try {
             mCameraManager.setTorchMode(cameraId, !currentTorchState);
         } catch (CameraAccessException e){}



     }
 };

 mCameraManager.registerTorchCallback(torchCallback, null);//fires onTorchModeChanged upon register
 mCameraManager.unregisterTorchCallback(torchCallback);

其他回答

试试这个。

CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    String cameraId = null; // Usually front camera is at 0 position.
    try {
        cameraId = camManager.getCameraIdList()[0];
        camManager.setTorchMode(cameraId, true);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }

我得到了自动闪光与以下简单的三步。

我刚刚在Manifest.xml文件中添加了相机和Flash权限

< uses-permission android: name = " android.permission。相机" / > < uses-feature android: name = " android.hardware。相机" / > < uses-permission android: name = " android.permission.FLASHLIGHT " / > < uses-feature android: name = " android.hardware.camera。Flash " android:required="false" />

In your Camera Code do this way. //Open Camera Camera mCamera = Camera.open(); //Get Camera Params for customisation Camera.Parameters parameters = mCamera.getParameters(); //Check Whether device supports AutoFlash, If you YES then set AutoFlash List<String> flashModes = parameters.getSupportedFlashModes(); if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MODE_AUTO)) { parameters.setFlashMode(Parameters.FLASH_MODE_AUTO); } mCamera.setParameters(parameters); mCamera.startPreview(); Build + Run —> Now Go to Dim light area and Snap photo, you should get auto flash light if device supports.

你也可以使用下面的代码来关闭闪光灯。

Camera.Parameters params = mCamera.getParameters()
p.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);

2021年,有了CameraX,现在非常简单:https://stackoverflow.com/a/66585201/294884


对于这个问题,你应该:

检查手电筒是否亮 是否可用? 如果是,那么关闭/打开 如果没有,你可以根据你的应用程序做任何事情 的需求。

检查设备flash可用性:

你可以使用以下方法:

 context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

如果flash可用,则返回true,否则返回false。

更多信息请参见:http://developer.android.com/reference/android/content/pm/PackageManager.html。

用于打开/关闭手电筒:

我谷歌了一下,找到了这个关于安卓,许可,手电筒。Android清单权限看起来很有希望:

 <!-- Allows access to the flashlight -->
 <permission android:name="android.permission.FLASHLIGHT"
             android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
             android:protectionLevel="normal"
             android:label="@string/permlab_flashlight"
             android:description="@string/permdesc_flashlight" />

然后使用Camera,设置Camera. parameters。这里使用的主要参数是FLASH_MODE_TORCH。

eg.

打开相机手电筒的代码片段。

Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

代码片段关闭相机led灯。

  cam.stopPreview();
  cam.release();

我刚找到一个使用此权限的项目。检查快速设置的src代码。这里http://code.google.com/p/quick-settings/(注意:这个链接现在是坏的)

对于手电筒直接看http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick/flashlight(注意:这个链接现在是坏的)

Update6 你也可以尝试在Galaxy Nexus上添加一个SurfaceView,通过什么API控制LED手电筒? 这似乎是一种适用于许多手机的解决方案。

更新5重要更新

我找到了一个替代链接(上面的坏链接):http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm你现在可以使用这个链接。[更新:14/9/2012此链接现在断开]

更新1

另一个开放源代码: http://code.google.com/p/torch/source/browse/

更新2

示例说明如何开启摩托罗拉Droid的LED: http://code.google.com/p/droidled/

另一种开放源代码:

http://code.google.com/p/covedesigndev/ http://code.google.com/p/search-light/

更新3(用于打开/关闭摄像头的小部件)

如果你想开发一个小部件,打开/关闭你的相机led,那么你必须参考我的回答小部件在android中打开/关闭相机手电筒。

更新4

如果你想设置相机LED的光强度,你可以参考我可以改变Android设备的LED强度吗?完整的文章。请注意,只有根HTC设备支持此功能。

* *问题:* *

在打开/关闭手电筒时也有一些问题。如。对于没有FLASH_MODE_TORCH的设备,或者即使有FLASH_MODE_TORCH,那么手电筒不打开等。

三星通常会制造很多问题。

你可以参考下面列出的问题:

在Android中使用相机手电筒

在三星Galaxy Ace 2.2.1和Galaxy Tab中打开/关闭相机LED/闪光灯

在Marshmallow和上面的例子中,CameraManager的“setTorchMode()”似乎是答案。这对我来说很管用:

 final CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
 CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback() {
     @Override
     public void onTorchModeUnavailable(String cameraId) {
         super.onTorchModeUnavailable(cameraId);
     }

     @Override
     public void onTorchModeChanged(String cameraId, boolean enabled) {
         super.onTorchModeChanged(cameraId, enabled);
         boolean currentTorchState = enabled;
         try {
             mCameraManager.setTorchMode(cameraId, !currentTorchState);
         } catch (CameraAccessException e){}



     }
 };

 mCameraManager.registerTorchCallback(torchCallback, null);//fires onTorchModeChanged upon register
 mCameraManager.unregisterTorchCallback(torchCallback);