Android:50 MS的闪光灯相机

时间:2014-05-30 22:59:04

标签: android

我想开启Android闪存50毫秒,但我似乎无法让它工作。调试器将在没有错误的情况下运行代码,但相机无法打开。我已经尝试停止await命令,看看时间是否太短,但我仍然无法打开相机。我很困惑,因为我在多个教程中看到了类似的代码。唯一的区别是我的主要活动没有运行。

清单:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />

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

<!-- Unrelated code -->
<activity android:name="SyncActivity"
            android:label="@string/app_name" >
</activity>

代码:

if(getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
    CountDownLatch latch = new CountDownLatch(1);
    Camera androidCamera = Camera.open();
    Camera.Parameters p = androidCamera.getParameters();
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    androidCamera.setParameters(p);
    //Flash and then turn off
    androidCamera.startPreview();
    latch.await(50, TimeUnit.MILLISECONDS); 
    androidCamera.stopPreview();
    androidCamera.release();

} else {
    throw new Exception("Cannot access Android Flash");
}

1 个答案:

答案 0 :(得分:0)

找到答案here.

代码:

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();

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:id="@+id/PREVIEW"
    android:layout_width="1dip"
    android:layout_height="1dip"/>