Comment déterminez-vous l'emplacement actuel d'un utilisateur dans une instance MPMoviePlayer?

StackOverflow https://stackoverflow.com/questions/1197407

  •  20-09-2019
  •  | 
  •  

Question

J'ai un long film que je vais mettre dans une application, et je voulais savoir quelle est la meilleure façon de mettre l'utilisateur à point qu'ils ont laissé. Quelqu'un peut-il me diriger dans la bonne direction?

Donc, si l'utilisateur regarde le film, a frappé fait, est-il une notification de l'heure ou quelque chose que je peux stocker et charger l'instance à nouveau avec ce temps?

Merci!

Était-ce utile?

La solution

J'ai trouvé une technique d'OS 3.0 qui ne fait pas l'utilisation de composants de l'API privées.

Vous pouvez vous inscrire pour recevoir des notifications MPAVControllerTimeDidJumpNotification et de saisir le MPAVControllerTimeParameter NSNumber sur userInfo Dictionnaire de cette notification.

Par exemple, juste avant de commencer la lecture de registre pour recevoir les notifications:

#define MPAVControllerTimeDidJumpNotification @"MPAVControllerTimeDidJumpNotification"

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTimeChanged:) name:MPAVControllerTimeDidJumpNotification object:nil];

Ensuite, démarrez la lecture du film. Ajouter une méthode qui sera appelée à chaque changement de temps que le film joue:

-(void)handleTimeChanged:(NSNotification *)notification
{
    NSDictionary * userInfo = notification.userInfo;
    int lastPositionInSeconds = [[userInfo valueForKey:@"MPAVControllerTimeParameter"] intValue];
    NSLog( @"Last time was %d", lastPositionInSeconds );
}

Et quand le film cesse de jouer (vous savez en écoutant les notifications MPMoviePlayerPlaybackDidFinishNotification) cesser d'écouter les notifications de MPAVControllerTimeDidJumpNotification.

Autres conseils

Cette question en double ou est liée aux autres questions suivantes ici:

Pour réitérer les réponses à ces questions, il n'y a pas d'API publique en cours pour lancer un film à un cadre ou d'un point dans le temps. Bien qu'il existe des API privées disponibles (-currentTime et -setCurrentTime), ils sont sujets à changement et permettra à votre application rejetée lors de la procédure d'approbation.

    `NSDictionary * userInfo = notification.userInfo;
    int lastPositionInSeconds = [[userInfo valueForKey:@"MPAVControllerTimeParameter"] intValue];
`// saving an NSInteger
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setInteger:lastPositionInSeconds forKey:@"currentMovieTime"];

    // getting an NSInteger
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        NSInteger myInt = [prefs integerForKey:@"currentMovieTime"]; // default is zero if nil
        currentMovieTime = myInt;
        self.streamMoviePlayer.initialPlaybackTime = currentMovieTime;

Vous pouvez l'utiliser pour définir / obtenir la variable et l'utiliser pour démarrer le film au bon moment. Cela fonctionne même si l'utilisateur redémarre son téléphone ou redémarre l'application.

Slava,

En fait, je regardais pour tous les événements se tiré par le système lors de la lecture du film et ne voient rien d'autre qui pourrait aider. Ce MPAVControllerTimeDidJumpNotification ne viré périodiquement pendant la lecture, mais pas aussi souvent que, par exemple, chaque seconde. Il peut être licenciée pour chaque image clé, mais je ne suis pas sûr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top