[SWIFT] Activer le flash quand l'application est inactive
Bonjour,
Je suis confronté à un petit soucis..
Mon application gère des géofences, lors de l'entrée dans une zone, je veux activer le flash de l'appareil photo pour le faire clignoter.
Voici ma fonction pour faire clignoter le flash :
func winkFlash() {
let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
if (device != nil) {
if (device!.hasTorch) {
do {
try device!.lockForConfiguration()
for _ in 0 ..< 20 {
//print(i)
if (device!.torchMode == AVCaptureDevice.TorchMode.on) {
device!.torchMode = AVCaptureDevice.TorchMode.off
} else {
do {
try device!.setTorchModeOnWithLevel(1.0)
} catch {
print(error)
}
}
usleep(300000)
}
device!.unlockForConfiguration()
} catch {
print(error)
}
}
}
}
Lors de l'entrée dans une zone, voici ma fonction :
func handleEvent(forRegion region: CLRegion!) {
if UIApplication.shared.applicationState == .active {
//print("application active !")
... code, etc etc
}
else { // Application inactive
//print("LOCAL NOTIF")
if let message = note(fromRegionIdentifier: region.identifier){
let content = UNMutableNotificationContent()
content.title = NSLocalizedString("Label_titre_Attention", comment: "")
content.body = message
content.sound = .default()
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
let request = UNNotificationRequest(identifier: "NotifLocale", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
// retrouver une valeur via une clé
let defaults = UserDefaults.standard
if let laValeurFlash = defaults.value(forKey: "Flash"){
if(laValeurFlash as! Bool == true){ // Active le flash
fonctions().winkFlash() // Ici, je me retrouve avec une erreur :/
}
}
}
}
}
L'erreur générée est la suivante :
2018-01-08 11:21:42.030659 Projet[7279:10979467] [] nw_socket_get_input_frames recvmsg(fd 8, 1024 bytes): [57] Socket is not connected
2018-01-08 11:21:42.043435 Projet[7279:10979671] [] nw_endpoint_handler_add_write_request [4.1 192.168.5.35:8888 failed socket-flow (satisfied)] cannot accept write requests
2018-01-08 11:21:42.047481 Projet[7279:10979672] [] __tcp_connection_write_eof_block_invoke Write close callback received error: [22] Invalid argument
Comment faire pour déclencher le flash quand l'application n'est pas active.. ou quand l'écran est éteint par exemple ?
Réponses
fonctions().winkFlash() // Ici, je me retrouve avec une erreur
self.winkFlash() peut-être ?
Non, je passe bien dedans (elle est dans ma classe fonctions) ^^
L'erreur, c'est celle en dessous que j'arrive pas à résoudre
peut être un bug d'iOS, ou une limitation?
Voir ici https://github.com/geektimecoil/react-native-onesignal/issues/245
Une limitation c’est bien possible. Franchement, il y a peu d’intérêt à faire clignoter le flash quand l’écran est fermée ou l’application en tâche de fond, à part consommer inutilement de la batterie. Quand je me promène avec l’écran fermé, c’est que l’iPhone est dans la poche.
Une vibration aurais plus de sens pour prévenir le joueur de l’entrée dans une zone. Cela fonctionne aussi dans la poche ou le sac, contrairement au flash.
Et du côté d'une photographe, je ne voudrais jamais qu'un flash se produise lorsque je suis en train de charger du film dans le noir
Pas sûr que cela soit possible.
Sinon, tu as ceci que tu peux conseiller, mais c'est pour toutes les notifications.
Bon bah si c'est une limitation d'iOs, j'vais pas me prendre la tête pour ça hein ^^
Merci pour vos réponses