jquery 访问手机摄像头_Android手机摄像头闪光灯编程(做个小手电)

对于手机闪光灯,不同的设备会有一些区别。

三星特别喜欢为APP开发者搞点复杂的东西,在Galaxy Tab平板中,你应该这样:

Camera cam;

void ledon() {

cam = Camera.open();

Parameters params = cam.getParameters();

params.setFlashMode(Parameters.FLASH_MODE_ON);

cam.setParameters(params);

cam.startPreview();

cam.autoFocus(new AutoFocusCallback() {

public void onAutoFocus(boolean success, Camera camera) {

}

});

}

void ledoff() {

cam.stopPreview();

cam.release();

}

如果这不起作用,可能是在startPreview之后进行FLASH_MODE_OFF初始化设置的问题。

我通过下面的方法,使其可以在多种手机上工作:

String manuName = android.os.Build.MANUFACTURER.toLowerCase();

Camera mCamera;

下面的代码演示了,如何打开和关闭灯光:

private void processOnClick() {

if (manuName.contains("motorola")) {

DroidLED led;

try {

led = new DroidLED();

led.enable(true);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

if (mCamera == null) {

try {

mCamera = Camera.open();

} catch (Exception e) {

e.printStackTrace();

}

}

if (mCamera != null) {

final Parameters params = mCamera.getParameters();

List flashModes = params.getSupportedFlashModes();

if (flashModes == null) {

return;

} else {

if (count == 0) {

params.setFlashMode(Parameters.FLASH_MODE_OFF);

mCamera.setParameters(params);

mCamera.startPreview();

}

String flashMode = params.getFlashMode();

if (!Parameters.FLASH_MODE_TORCH.equals(flashMode)) {

if (flashModes.contains(Parameters.FLASH_MODE_TORCH)) {

params.setFlashMode(Parameters.FLASH_MODE_TORCH);

mCamera.setParameters(params);

} else {

// Toast.makeText(this,

// "Flash mode (torch) not supported",Toast.LENGTH_LONG).show();

params.setFlashMode(Parameters.FLASH_MODE_ON);

mCamera.setParameters(params);

try {

mCamera.autoFocus(new AutoFocusCallback() {

public void onAutoFocus(boolean success, Camera camera) {

count = 1;

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}

}

if (mCamera == null) {

return;

}

}

private void processOffClick() {

if (manuName.contains("motorola")) {

DroidLED led;

try {

led = new DroidLED();

led.enable(false);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

if (mCamera != null) {

count = 0;

mCamera.stopPreview();

}

}

}

下面是 DroidLED 类:

class DroidLED {

private Object svc = null;

private Method getFlashlightEnabled = null;

private Method setFlashlightEnabled = null;

@SuppressWarnings("unchecked")

public DroidLED() throws Exception {

try {

// call ServiceManager.getService("hardware") to get an IBinder for the service.

// this appears to be totally undocumented and not exposed in the SDK whatsoever.

Class sm = Class.forName("android.os.ServiceManager");

Object hwBinder = sm.getMethod("getService", String.class).invoke(null, "hardware");

// get the hardware service stub. this seems to just get us one step closer to the proxy

Class hwsstub = Class.forName("android.os.IHardwareService$Stub");

Method asInterface = hwsstub.getMethod("asInterface", android.os.IBinder.class);

svc = asInterface.invoke(null, (IBinder) hwBinder);

// grab the class (android.os.IHardwareService$Stub$Proxy) so we can reflect on its methods

Class proxy = svc.getClass();

// save methods

getFlashlightEnabled = proxy.getMethod("getFlashlightEnabled");

setFlashlightEnabled = proxy.getMethod("setFlashlightEnabled", boolean.class);

}

catch(Exception e) {

throw new Exception("LED could not be initialized");

}

}

public boolean isEnabled() {

try {

return getFlashlightEnabled.invoke(svc).equals(true);

}

catch(Exception e) {

return false;

}

}

public void enable(boolean tf) {

try {

setFlashlightEnabled.invoke(svc, tf);

}

catch(Exception e) {}

}

}

在AndroidManifest.xml中必须设置下列权限:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值