【问题标题】:Flash light not detected未检测到闪光灯
【发布时间】:2013-07-07 17:40:09
【问题描述】:

我正在尝试编写一个在按下按钮时打开闪光灯的应用程序。问题是应用程序没有检测到我手机上的闪光灯。我在互联网上搜索了很多。当然其他人也遇到过这个问题,我也应用了这些解决方案,但它们似乎不起作用。我不知道是什么导致了这个问题。在此处发布代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_starting_point);

    if(! getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) // checking if flash light is available inn android phone
    {
        Toast.makeText(StartingPoint.this, "Sorry this app can't work without flash light", Toast.LENGTH_LONG).show();
        finish();
    }

    cam = Camera.open();

    param = cam.getParameters();


}

@Override
public void onClick (View v)
{
      if(!flashOn)
        {
            i=0;

            flashOn=true;

            param.setFlashMode(Parameters.FLASH_MODE_TORCH);
            cam.setParameters(param);
            cam.startPreview();
        }
        else{
                i=0;

                flashOn=false;

                param.setFlashMode(Parameters.FLASH_MODE_OFF);
                cam.setParameters(param);
                cam.stopPreview();
            }

}

我也在 Android Manifest 中添加了这些权限。

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

问候

【问题讨论】:

  • 你有没有试过把这些行 cam = Camera.open();参数 = cam.getParameters();在 onCreate() 上的第一个 if() 语句之前?
  • 你在所有设备上都测试过吗?
  • 请在 XOLO A600 或 Moto G 上测试 @Ilya_Gazman 的代码...

标签: java android camera flashlight


【解决方案1】:

我有一个检查手电筒功能的应用程序,它工作正常。这是我用来检查用户是否有灯的代码:

if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    new AlertDialog.Builder(this)
    .setTitle("Sorry")
    .setMessage("It appears that your device is incompatible with this app. Sorry for the inconvenience.")
    .setNeutralButton("Close", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            finish();
        }
    }).show();
    return;
}

现在要真正让灯光工作,我制作了一个切换按钮并编写了以下代码:

private boolean isLightOn = false;
private Camera camera;
private ToggleButton button;
public Vibrator v;

if (camera == null) {
    camera = Camera.open();
}

final Parameters p = camera.getParameters();

button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        if (isLightOn) {

        Toast.makeText(context, "Light off!", Toast.LENGTH_SHORT).show();
        v.vibrate(40);
        p.setFlashMode(Parameters.FLASH_MODE_OFF);
        camera.setParameters(p);
        camera.stopPreview();
        isLightOn = false;

        } else {

            Toast.makeText(context, "Light on!", Toast.LENGTH_SHORT).show();
        v.vibrate(40);
        p.setFlashMode(Parameters.FLASH_MODE_TORCH);
        camera.setParameters(p);
        camera.startPreview();
        isLightOn = true;

        }

    }
});

最后,这是我使用的唯一权限:

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

注意:以上所有代码都在我的activity的onCreate方法中。

希望这有助于解决您的问题!

【讨论】:

    【解决方案2】:

    我认为您不会再次设置参数: 我用它来检查是否有手电筒:

    public static Boolean hasFlashLight(Context context){
        return context.getApplicationContext().getPackageManager()
                .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    }
    

    然后将其关闭和打开:

    Parameters params = mCamera.getParameters();
    if (!isFlashlightOn) {
        params.setFlashMode(Parameters.FLASH_MODE_OFF);
    } else {
        params.setFlashMode(Parameters.FLASH_MODE_TORCH);
    }
    mCamera.setParameters(params);
    

    让我知道它是否也适合你。

    【讨论】:

    • 好的,我现在知道了,你在哪个设备上测试这个?您是否在其他设备上也遇到过同样的问题?
    【解决方案3】:

    我遇到了同样的问题。用这个

    if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
      //Flash ok
      Parameters params = mCamera.getParameters();
      params.setFlashMode(Parameters.FLASH_MODE_TORCH);
    } else {
      //Flash not supported
    }
    

    确定您的设备是否有闪光灯。

    【讨论】:

      【解决方案4】:

      有些相机需要表面支架,否则会挡住闪光灯。

      SurfaceView preview = (SurfaceView) findViewById(...);
      SurfaceHolder holder = preview.getHolder();
      holder.addCallback(this);
      Camera camera = Camera.open();
      camera.setPreviewDisplay(holder);
      

      【讨论】:

      • @Niko 不,我只是想在屏幕上看到我的图标
      • 嘿嘿真有趣! :P
      • 我对这个问题感到绝望,现在我的问题是我的应用程序可以在我所有的设备上运行,我没有一个不能使用旧代码的设备......我找到了这个XOLO A600 上的问题
      • Moto G 会出现这种情况吗?
      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 2019-04-27
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多