[代码]c#/cpp/oc代码:

01 #import <AVFoundation/AVFoundation.h>
02   
03 void CBLediOS::turnOnLed()
04 {
05     AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
06     if ([device hasTorch]) {
07         [device lockForConfiguration:nil];
08         [device setTorchMode: AVCaptureTorchModeOn];
09         [device unlockForConfiguration];
10     }
11 }
12 void CBLediOS::turnOffLed()
13 {
14     AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
15     if ([device hasTorch]) {
16         [device lockForConfiguration:nil];
17         [device setTorchMode: AVCaptureTorchModeOff];
18         [device unlockForConfiguration];
19     }
20      
21 }

这段代码是我昨天刚上传的iphone手电筒中的一部分代码

代码示范了如何开启iphone上的闪光灯

AVCaptureDevice必须要引入AVFoundation.framework

defaultDeviceWithMediaType需传入一个字串,在这个例子传入了AVMediaTypeVideo以取得摄像头

AVMediaTypeVideo是ios4.0以上提供的一个const NSString,声明在AVMediaFormat.h.

其他Media Type的声明

NSString *const AVMediaTypeVideo;
NSString *const AVMediaTypeAudio;
NSString *const AVMediaTypeText;
NSString *const AVMediaTypeClosedCaption;
NSString *const AVMediaTypeSubtitle;
NSString *const AVMediaTypeTimecode;
NSString *const AVMediaTypeTimedMetadata;
NSString *const AVMediaTypeMuxed;

若是要检测装置是否提供该功能,可以透过

- (BOOL)hasMediaType:(NSString *)mediaType

来取得

取得摄像头后,我们可以透过

@property(nonatomic, readonly) BOOL hasTorch

@property(nonatomic, readonly) BOOL hasFlash

来判断该摄像头是否有提供闪光灯

我是要持续开启所以使用Torch Mode

lockForConfiguration跟unlockForConfiguration是配对的API

呼叫lockForConfiguration就可以控制硬件了

控制完毕后要呼叫unlockForConfiguration

[device setTorchMode: AVCaptureTorchModeOn];

[device setTorchMode: AVCaptureTorchModeOff];

这两行代码,就是开关闪光灯的代码

注意此代码要在真机下作用