【问题标题】:Android: how to check the flash light is available on device?Android:如何检查设备上的闪光灯是否可用?
【发布时间】:2026-02-10 06:45:01
【问题描述】:

如何检查设备上可用的闪光灯?还想知道如何打开/关闭闪光灯? 我已经放了代码,但现在不工作? 我搜索了这个
http://gitorious.org/rowboat/frameworks-base/commit/eb9cbb8fdddf4c887004b20b504083035d57a15f
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/com/android/server/LightsService.java#LightsService

请告诉我应该使用哪个?
谢谢。

【问题讨论】:

标签: android


【解决方案1】:

你可以使用下面的

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

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

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

【讨论】:

  • 我拥有便宜的中国安卓平板电脑,即使没有 Flash 支持,这也会返回 true。我还发现 getSupportedFlashModes() 在这种情况下返回 null,因此可能用于仔细检查 flash 是否可用。
  • 2013 Nexus 7 也返回 true。没有闪光灯。
  • Nexus 7 返回 true,然后 getSupportedFlashModes() 返回一个包含一个条目的列表。一个字符串,读作“关闭”。 :-(
  • 我在这里提到了如何修复 Nexus 7:*.com/questions/13413938/…
  • Iiconbit nt-3702s 也返回 true。
【解决方案2】:
boolean hasFlash =this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

public boolean hasFlash() {
        if (camera == null) {
            return false;
        }

        Camera.Parameters parameters = camera.getParameters();

        if (parameters.getFlashMode() == null) {
            return false;
        }

        List<String> supportedFlashModes = parameters.getSupportedFlashModes();
        if (supportedFlashModes == null || supportedFlashModes.isEmpty() || supportedFlashModes.size() == 1 && supportedFlashModes.get(0).equals(Camera.Parameters.FLASH_MODE_OFF)) {
            return false;
        }

        return true;
    }

【讨论】:

    【解决方案3】:

    首先获得支持的闪光模式:

    camera = Camera.open(i);    // Introduced in API level 9
    parameters = camera.getParameters();
    String[] flashModes = parameters.getSupportedFlashModes();
    

    然后检查该数组是否包含正确的常量,例如:“auto”、“on”、“off”。

    更多信息在: http://developer.android.com/reference/android/hardware/Camera.Parameters.html#FLASH_MODE_AUTO

    【讨论】:

      【解决方案4】:

      这可以帮助完全打开/关闭设备的闪光灯。这是让我满意的,希望对你也有用。

      打开相机闪光灯

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

      关闭相机闪光灯

      camera = Camera.open();
      Parameters p = camera.getParameters();
      p.setFlashMode(Parameters.FLASH_MODE_OFF);
      camera.setParameters(p);
      camera.stopPreview();
      

      将此权限放入清单文件中

      <uses-permission android:name="android.permission.CAMERA" />
      <uses-feature android:name="android.hardware.camera" />
      

      更多详情可以去HERE.

      【讨论】:

      • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。