Processus pour l'utilisateur final
- Ouvrir l'application
- Activez le "mode silencieux".
- Appuyez sur le bouton de verrouillage
- L'application peut toujours COMMENCER à diffuser un son après plusieurs heures, sans diffuser de son entre-temps.
Les applications qui font cela
Beaucoup d'applications d'alarme ont réussi à faire cela & Je ne pense pas qu'elles utilisent le son silencieux pour maintenir l'application en marche car elles ne sonnent pas si vous quittez l'application avec la touche "home".
- Réveil Pro
- Mon horloge
- Alarme à vagues
- Alarme
- iHome
- ...
...Est-ce qu'ils gardent une boucle en cours après avoir été verrouillé ou est-ce qu'une notification (qui ne peut pas jouer le son en mode silencieux) redémarre l'application pour jouer l'audio, ou une autre méthode ?
Méthodes actuelles mises en œuvre
Utilisation d'AVAudioPlayer :
AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(YES);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);
Et en mettant Info.plist à :
Modes d'arrière-plan requis (UIBackGroundModes) - L'application joue du son (audio)
Actuellement
Je peux lire le son même en mode silencieux lorsque l'application est en cours d'exécution et à l'écran. Si l'audio est déjà en cours d'exécution, l'application peut être fermée avec le bouton d'accueil et l'audio s'exécutera. MAIS si l'application n'est pas en train de jouer l'audio et que l'écran est verrouillé, tous les threads sont tués et l'audio n'est jamais joué. Comment ces applications parviennent-elles à contourner ce problème ?
Approches possibles trouvées jusqu'à présent
A. Utilisez 'beginBackgroundTaskWithExpirationHandler:' avec une boucle infinie pour faire tourner l'application indéfiniment.
Pour :
- Il semble que l'on puisse faire fonctionner ce système dans de nombreuses situations, même lorsque l'utilisateur appuie sur la touche "home".
Cons :
- Cela va à l'encontre de la politique d'Apple, d'après ce que je sais.
- utilisera davantage de ressources
Commentaires :
J'ai presque réussi à le faire fonctionner et je pourrais le faire avec quelques ajustements. Il semble que ce ne soit pas ce que font toutes ces autres alarmes, car elles ne continuent pas à fonctionner si vous appuyez sur la touche Home BTN. Ce qui suggère qu'elles utilisent une méthode qui leur donne la permission de fonctionner lorsqu'elles sont verrouillées mais pas dans le BG. (Ce qui est ce dont j'ai besoin)
De même, lorsque vous demandez combien de temps il vous reste à courir, vous obtenez environ 10 minutes. En introduisant une boucle infinie, les chiffres descendront à 0 et resteront dans le négatif pendant des heures. (testé) Je ne sais pas comment cela se comporterait dans le monde réel ou en termes d'acceptation par les applications.
B. Utilisez une boucle audio silencieuse pour vous faire passer pour un centre multimédia à lecture audio continue.
Pour :
- Il a fonctionné lorsqu'il était verrouillé, et continuera à fonctionner dans la plupart des situations.
Cons :
- Peut échouer si elle est interrompue par un autre media center et dans certaines autres occasions.
- On peut aussi aller à l'encontre de la politique d'Apple.
Commentaires :
Cela peut fonctionner dans de nombreuses situations, mais ce n'est de loin pas l'idéal. Et comme je le répète, il doit y avoir une autre méthode qui n'est pas documentée.
Conclusions jusqu'à présent
Les tests effectués avec les APP répertoriés suggèrent qu'ils n'utilisent aucune des deux méthodes que je viens de décrire. La méthode "A" semble être plus proche, mais si elle était mise en œuvre, elle ne se comporterait pas comme ces applications.
J'ai utilisé un ticket de développeur Apple pour obtenir plus d'informations, je posterai toute nouvelle découverte par ce biais également.
Merci.
Nous vous remercions pour votre participation jusqu'à présent.