2017-04-17 3 views
0

J'ai une application de musique de travail, écrite en Swift. Je voulais intégrer un mode veille qui pourrait mettre en pause la musique jouée après, disons 10 minutes. J'ai utilisé perform(_ aSelector: Selector, with anArgument: Any?, afterDelay delay: TimeInterval) pour cette tâche, cela a bien fonctionné.Comment empêcher l'application de se mettre en veille, afin d'intégrer un mode veille pour la musique

Mais il y a un problème. Il y a de fortes chances que l'iPhone se mette en veille avant la fin des 10 minutes, donc la fonction de pause n'est pas appelée, et la musique continue à jouer. Je comprends qu'il y a d'autres façons d'envoyer une action après 10 minutes (NSTimer, utilisez GCD) mais si je comprends bien, aucune de ces solutions n'empêchera la machine de se mettre en veille ou de réveiller l'application pour effectuer le tâche.

Peut-être que je pourrais utiliser background mode, mais:

  1. Mon but est pas vraiment dans les problèmes que ce mode est censé résoudre. Je ne veux pas avoir le temps de finir, je veux juste un peu 1/10 de second processeur à un certain moment.
  2. Cette option ne garantit pas de travailler pendant 10 minutes.

Est-ce une façon de réaliser ce dont j'ai besoin?

+1

Vous pouvez empêcher l'appareil d'aller dormir avec 'UIApplication. shared.isIdleTimerDisabled = true', mais ce serait probablement jeter le bébé avec l'eau du bain. – Erik

Répondre

2

Vous pouvez faire: UIApplication.shared.isIdleTimerDisabled = true, comme cela est le seul moyen Swift 3, et vous pouvez faire UIApplication.sharedApplication().idleTimerDisabled = true à Swift 2 ou [UIApplication sharedApplication].idleTimerDisabled = YES; en c objectif

+1

Cela fonctionne, mais j'ai deux problèmes: d'abord cela va garder l'affichage, et ce n'était pas obligatoire pour mon but. Mais plus important: Apple va-t-il valider une application avec ce paramètre? (même si je le désactive dès que l'application met le son en pause) D'autres moyens d'obtenir le même type de résultats ne sont autorisés que pour un type spécifique d'Apps par Apple. – FredericP

+0

Si ce n'est pas ce dont vous avez besoin, alors je suis désolé; Je ne sais pas autrement. Et oui, Apple le permettrait: J'ai vu plein d'applications avec cette fonctionnalité - désolé, je n'étais pas vraiment utile. –