2015-02-02 2 views
1

토치가 켜져 있는지 확인하고 싶습니다. 먼저 Control Center를 열고 토치를 켭니다. 다음으로 응용 프로그램을 실행하고 토치 테스트를 수행합니다. 나는이 같은 AVCaptureDevice를 얻을 :iOS에서 토치가 켜져 있는지 확인하십시오.

  • torchLevel
  • torchActive
  • torchMode
  • flashActive
  • flashMode
:

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

가 그럼 난 같은 장치 개체의 다양한 속성을 확인

그러나 나는 항상 그 성화가 꺼지는 것을 얻는다. 이 속성을 읽으려면 허가가 필요합니까 아니면 토치가 켜져 있는지 확인하는 다른 방법이 있습니까?

답변

1

하면이 상태 변화를 결정 KVO 코드 토치. 아마도 이것이 도움이 될 수 있습니다. 나는 같은 문제를 해결하려고 노력하고 있지만 제어 센터에서 켜져있는 성화에 관한 정보에 접근 할 수 없다. 토치가 현재 활성 상태인지 여부를 알기 위해 KVO 또는 다른 것을 사용하는 다른 방법이 있어야합니다.

static void * const torchActiveObservationContext = (void*)&torchActiveObservationContext; 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    if (context == torchActiveObservationContext) { 
     AVCaptureDevice *thisDevice = (AVCaptureDevice*)object; 
     NSLog(@"Current torch level: %f", thisDevice.torchActive); 
    } 
    else { 
     [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 
    } 
} 

-(id) init { 
    if (self = [super init]) { 
     AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

     [videoDevice addObserver:self forKeyPath:@"torchActive" options:NSKeyValueObservingOptionNew context:torchActiveObservationContext]; 

     // whatever other initialization code ... 
    } 
    return self; 
} 

나는 torchLevel과 torchMode를 사용하지 않으려 고했다. 이것은 AVCaptureDevice를 제어 할 때 이미 켜져 있다면 횃불을 켠 채로두고 싶기 때문에 실제 문제입니다.

2

AVCaptureDevice Class reference을 보면, 첫 번째 장소에 토치가 있는지 (hasTorch), 사용 가능/지원되는지 (torchAvailable) 확인하고 싶을 수도 있습니다.

는 속성 torchActive 읽기 전용 부울, 그래서 접근 승/어떤 문제가 안되지만 문서 말 :

토치 장치에 현재와 이전 현재 사용할 수 있어야합니다 그것은 활성화 될 수 있습니다.

어쩌면 먼저이 두 속성을 확인해야합니까?

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

    if (device.hasTorch && device.torchAvailable) 
    NSLog("%ld", device.torchMode) //an NSInteger in an enum 
    } 
    else 
    { 
     NSLog("Torch not present/available") 
    } 

스위프트 :

의 Obj-C ... 바보 보이지만, 이러한 기술적 문제를 해결하지 않지만

let device: AVCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 

if (device.hasTorch && device.torchAvailable){ 
    println(device.torchMode.rawValue) //print enum Int value 
} else { 
    println("Torch not present/available") 
} 
+0

불행히도이 도움이되지 않습니다. – Sayaki

관련 문제