2015-08-21 33 views
8

Ciao sto usando un'app basata sulla posizione e voglio usare la torcia della fotocamera iphone mentre sono in background. Purtroppo la torcia funziona solo in primo piano, spegne automaticamente il flash in background anche se il codice è in esecuzione.La torcia Iphone non funziona mentre l'app è in background

Il codice che ho usato funziona solo in primo piano

#import <AVFoundation/AVFoundation.h> 
//flashcode 
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]; 
    } 
} 
+0

Sarebbe bello se qualcuno spiegasse in che modo il sandboxing delle mele uccide la torcia quando l'app è in background –

+1

Ho modificato la mia risposta per spiegare un po 'di più. –

+1

Ha aiutato un po '? –

risposta

11

Questo è un comportamento normale.
Il sandboxing di Apple non ti consente di tenere acceso il flash mentre la tua app è in background.
Non c'è soluzione alternativa a meno che non stiamo parlando di un'app jailbroken.

Edit:
Apple è molto rigorosa sull'utilizzo di API che di sistema. Soprattutto quando si tratta di:
- User privacy
- La durata della batteria
- L'esperienza dell'utente

Nel caso della torcia, gli ultimi due elementi sono rilevanti. Apple non permetterà a un'app di scaricare la batteria quando non è in primo piano e gli utenti iOS sono abituati al fatto che torcia, videocamera, microfono ... vengono immediatamente disattivati ​​quando si passa allo sfondo (con un'eccezione per il microfono in alcune modalità di sfondo casi).

Per rispondere al commento sul tuo post iniziale, iOS controlla il tuo hardware. Quindi, dato che Apple ha deciso che non vuole che la luce rimanga accesa quando l'utente chiude l'app, iOS spegnerà il flash solo quando l'app verrà messa in background. La tua app non ha autorità per impedirlo.