访问设备硬件(Camera Flash)以编程方式在android中

时间:2010-12-20 12:39:10

标签: android

我有一个问题,我们可以访问Android设备相机的闪光灯
  程序化。这有可能以程序方式打开和关闭闪光灯吗?   请给我我的答案。   提前谢谢。

    package com.thedevelopersinfo.tutorial.android.soundrecordingexample;

         import java.io.File;

         import android.app.Activity;
       import android.content.ContentResolver;
       import android.content.ContentValues;
     import android.content.Intent;
       import android.hardware.Camera;

     import android.media.MediaRecorder;
      import android.net.Uri;
     import android.os.Bundle;
      import android.os.Environment;
     import android.provider.MediaStore;
     import android.provider.MediaStore.MediaColumns;
      import android.view.View;
     import android.view.View.OnClickListener;
        import android.widget.Button;


         public class Main extends Activity {
    private MediaRecorder mediaRecorder;
    private File file = null;
    static final String PREFIX = "record";
    static final String EXTENSION = ".3gpp";
    private Button b1;
    Camera mCamera;
    public boolean isOn=true;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

         mCamera = Camera.open();

        Camera.Parameters params = mCamera.getParameters();


        b1=(Button)findViewById(R.id.startBtn);
        b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub


                 setFlashlight();



            }
        });

    }
    public void setFlashlight()
    {
        if (mCamera == null)
        {

        }
        Camera.Parameters params = mCamera.getParameters();
        String value;
        if (isOn) // we are being ask to turn it on
        {
            value = Camera.Parameters.FLASH_MODE_TORCH;
        }
        else  // we are being asked to turn it off
        {
            value =  Camera.Parameters.FLASH_MODE_AUTO;
        }

        try{    
            params.setFlashMode(value);
            mCamera.setParameters(params);

            String nowMode = mCamera.getParameters().getFlashMode();

            if (isOn)
            {
                 nowMode.equals(Camera.Parameters.FLASH_MODE_TORCH);
            }
            if (!isOn)
            {
                 nowMode.equals(Camera.Parameters.FLASH_MODE_AUTO);
            }

        }
        catch (Exception ex)
        {
        }
        }

}

但我得到了以下异常 03-10 18:47:34.907:ERROR / QualcommCameraHardware(1280):此传感器不支持参数AntiBanding

2 个答案:

答案 0 :(得分:1)

您可以使用Camera.Parameters.setFlashMode执行此操作。请参阅:http://developer.android.com/reference/android/hardware/Camera.Parameters.html

答案 1 :(得分:0)

有可能。首先你必须得到硬件相机的属性。使用下面的方法。

String flattenString;
camera = Camera.open();
Camera.Parameters param = camera.getParameters();
flattenString = param.flatten();

其中flatten可以给你一个带键值对的参数字符串。 你必须把它拆分为","并找到闪存模式键及其值 然后在下面的方法

中应用此参数
Camera.Parameters parameters = mCamera.getParameters();         
parameters.set("Key", value);

你的密钥是" flash-mode" 和价值是"开"

然后将此参数添加到setParameters方法并启动相机预览

mCamera.setParameters(parameters);
mCamera.startPreview(); 

您的闪光灯现已开启。