2012-12-17 1 views
0

Je crée un programme iOS pour utiliser la fonction AVAudioPlayer pour lire de la musique en arrière-plan. Mais je ne sais pas comment arrêter la musique après un certain temps. J'essaie d'utiliser le UILocalNotification pour arrêter la musique dans la méthode:Comment arrêter la musique en mode d'arrière-plan sur le programme IOS?

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notification 

Mais la seule façon effectly après que l'utilisateur REÇU la notification et cliquez pour fermer! Comment puis-je arrêter la musique automatiquement après un certain temps?

Répondre

2

Si vous utilisez AVPlayer au lieu de AVAudioPlayer vous pouvez y parvenir en utilisant addBoundaryTimeObserverForTimes:queue:usingBlock:

J'ai essayé avec AVQueuePlayer (qui est une sous-classe de AVPlayer) et cela a fonctionné.

Essayez quelque chose comme ceci:

id observer = [avPlayer addBoundaryTimeObserverForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:CMTimeMake(60, 1)]] queue:NULL usingBlock:^{ 
     [avPlayer pause]; 
    }]; 

Et quelque part plus tard:

[avPlayer removeTimeObserver:observer]; 
+0

Merci beaucoup! Je le mets au passage! Mais l'AVQueuePlayer peut-il jouer en boucle? – yikyCai

+0

Je suggère d'enregistrer 'AVPlayerItemDidPlayToEndTimeNotification', puis de redémarrer le morceau ou de le mettre en file d'attente à nouveau. Mais je n'ai pas fait cela en arrière-plan, donc je ne suis pas sûr. S'il vous plaît dites-moi si vous réussissez ou si vous rencontrez plus de problèmes. Bonne chance! – Hjalmar

+0

Bonne réponse. Beaucoup mieux que le mien!Je t'aurais fait deux fois plus d'argent si je le pouvais. – matt

0

J'aimerais beaucoup avoir tort, mais je crois que ce que vous demandez est peut-être impossible. Mon impression est que si l'utilisateur clique effectivement sur le bouton Accueil pour envoyer votre application en arrière-plan, il ne peut pas fonctionner comme un «minuteur de veille», car vous ne pouvez pas exécuter une minuterie. Les propres applications d'Apple peuvent faire ce genre de chose, mais ils ont des privilèges spéciaux.

Par exemple, regardez cette application:

https://itunes.apple.com/us/app/music-sleep-timer/id320583424?mt=8

Regardez comment il dit: « Souvenez-vous de garder cette application au premier plan! » Clairement c'est parce qu'une fois que l'application est en arrière-plan, la minuterie cesse de fonctionner.

Il est peut-être préférable de recommander à l'utilisateur d'utiliser le compte à rebours dans l'application Horloge d'Apple. Il peut éteindre votre musique et mettre l'appareil en veille.

+0

Merci pour votre aide Mais acturally il y a beaucoup app atteindre déjà la fonction comme https:! // itunes .apple.com/cn/app/ super-hypnotist/id378451417? l = fr & mt = 8 ou https://itunes.apple.com/cn/app/qq-yin-le/id414603431?l=fr&mt=8 donc je pense qu'il doit y avoir un moyen de eachieve – yikyCai

+0

Eh bien, il existe des moyens d'atteindre le même effet par tromperie. Disons que vous avez un fichier musical de 30 minutes. Et vous voulez seulement jouer 10 minutes de celui-ci. Ensuite, vous pouvez utiliser la capacité d'édition de l'iOS pour créer un nouveau fichier musical composé uniquement des dix premières minutes de ce fichier. Donc, il joue, l'utilisateur vous met en arrière-plan, et si le fichier se termine, la musique s'arrête (et votre application est suspendue, car il ne joue plus). – matt

+0

c'est un moyen! Mais si le fichier n'est qu'à 10 minutes et que je veux le répéter pour le jouer après 30 minutes, c'est ce que je confonds! – yikyCai

Questions connexes