Ne peut pas beginReceivingRemoteControlEvents dans iOS
Dans mon application, je veux permettre à l'utilisateur de contrôler la lecture audio en arrière-plan. Je fond ensemble les modes .plist, et en joue en bg comme je le voulais.Mais je ne peux pas obtenir aucune réponse de toucher les boutons de contrôle.
J'ai mis le AudioSession
comme ce
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance]setActive:YES error:nil];
Puis, dans viewContoller où mon joueur est placé je beginReceivingRemoteControlEvents
comme ce
if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[self becomeFirstResponder];
NSLog(@"Responds!");
}
Et il imprime Responds!
Mais le problème est que cette méthode n'est jamais appelé
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
NSLog(@"Where is my event?");
if(event.type == UIEventTypeRemoteControl)
{
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
NSLog(@"Pause");
[self playWords:playButton];
break;
case UIEventSubtypeRemoteControlNextTrack:
NSLog(@"Next");
[self next];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
NSLog(@"Prev");
[self prev];
break;
}
}
J'ai même essayé d'écrire une catégorie sur UIApplication
de le laisser devenir le premier intervenant, mais il n'aide pas
@implementation UIApplication (RemoteEvents)
-(BOOL)canBecomeFirstResponder
{
return YES;
}
@end
Pourquoi cela peut-il arriver?
SOLUTION
Voici ce qui a résolu mon problème La saisie de fond sur iOS4 pour la lecture audio
OriginalL'auteur Nikita Pestrov | 2012-04-23
Vous devez vous connecter pour publier un commentaire.
J'ai fait le même travail dans mon projet, ça fonctionne. Veuillez suivre ce, peut-être vous aider. Changer le nom de l'événement etc. Dans mon code _audio est l'objet de AVAudioPlayer.
Une autre chose est que vous ne pouvez tester sur le simulateur , l'utilisation de l'appareil si vous utilisez le simulateur pour tester supprimer des événements et fond musique.
Je test dans l'appareil)
Cela a fonctionné pour moi une fois j'ai ajouté -(BOOL)canBecomeFirstResponder{return OUI;}. Merci!
Si cela a fonctionné pour vous, alors upvote s'il vous plaît. @arsenius
OriginalL'auteur Khalid Usman
Il y a un nouveau mécanisme pour l'écoute de contrôle à distance des événements. Par exemple, pour l'exécution d'un bloc lorsque le casque d'écoute lecture/pause bouton est pressé:
ou, si vous préférez utiliser une méthode au lieu d'un bloc:
Pour arrêter:
ou:
Vous aurez besoin d'ajouter cela à la inclut les régions de votre fichier:
Pour qu'il fonctionne en arrière-plan, vous devez avoir l'audio d'arrière-plan mode ajouté à votre application.
OriginalL'auteur mahboudz
Examen de cette exemple de code d'Apple pour un exemple d'utilisation. Probablement votre principale-vue-contrôleur n'est pas en fait en train de devenir le premier intervenant. Une alternative d'utilisation est de placer ce code dans votre Application Délégué (ce qui sera toujours le premier répondeur) et de répondre à ces événements avant qu'ils aient eu une chance de se propager, et potentiellement être consommés par d'autres intervenants.
OriginalL'auteur Sam
Vous avez
mais dans la signature de la méthode que vous avez
L'endroit où vous vous inscrivez à la signature est fausse. Il suffit de les remplacer par
Sont manquantes : ce qui rend l'application d'envoyer le même pour un non-existence de la méthode je suppose. Je suis surpris que votre application n'est pas s'écraser.
OriginalL'auteur Srikanth