How can I turn the iPhone's LED camera flash on/off programatically?
Asked
Active
Viewed 5.8k times
36
-
1Dont forget to add AVFoundation.framework also... – raaz Mar 23 '12 at 17:29
2 Answers
82
#import <AVFoundation/AVFoundation.h>
...
- (void) turnTorchOn: (bool) on {
// check if flashlight available
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch] && [device hasFlash]){
[device lockForConfiguration:nil];
if (on) {
[device setTorchMode:AVCaptureTorchModeOn];
[device setFlashMode:AVCaptureFlashModeOn];
//torchIsOn = YES; //define as a variable/property if you need to know status
} else {
[device setTorchMode:AVCaptureTorchModeOff];
[device setFlashMode:AVCaptureFlashModeOff];
//torchIsOn = NO;
}
[device unlockForConfiguration];
}
} }

Tibidabo
- 21,461
- 5
- 90
- 86
-
-
@YassineHoussni you can define it either as an iVar in the class name or a property if you need getter and setters – Dejell Feb 06 '13 at 12:50
-
@Odelya yeah I already found the solution, I have defined it as a property, thanks though! – Feb 06 '13 at 12:53
-
-
1I better way to check for a class is: if ([AVCaptureDevice class]) { ... } // if you can the SDK that has a class but you're not sure the class exists on the device. – Leslie Godwin Jul 05 '13 at 06:51
-
for me this just turns the flashlight on my phone on, it doesn't just turn the flash on at the moment a photo is taken in my AVCaptureSession. – jjjjjjjj Mar 18 '16 at 16:50
-
I' using these solution for my C++ call and it works pretty fine! Thanks! – peter70 Feb 26 '19 at 14:58
25
I combined the timer with the above code.it worked for me...
- (void)viewDidLoad
{
[super viewDidLoad];
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(toggleFlashlight) userInfo:nil repeats:YES];
// Do any additional setup after loading the view from its nib.
}
- (void) toggleFlashlight
{
// check if flashlight available
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch] && [device hasFlash]){
[device lockForConfiguration:nil];
if (device.torchMode == AVCaptureTorchModeOff)
{
[device setTorchMode:AVCaptureTorchModeOn];
[device setFlashMode:AVCaptureFlashModeOn];
//torchIsOn = YES;
}
else
{
[device setTorchMode:AVCaptureTorchModeOff];
[device setFlashMode:AVCaptureFlashModeOff];
// torchIsOn = NO;
}
[device unlockForConfiguration];
}
} }

Sanjay Chaudhry
- 3,181
- 1
- 22
- 31

girish
- 900
- 12
- 23