2

我有一部很长的电影,我将把它放在一个应用程序中,我想知道让用户回到他们离开的地方的最佳方式。有人可以指出我正确的方向吗?

因此,如果用户正在观看电影,点击完成,是否有当前时间的通知或我可以存储并使用该时间再次加载实例的东西?

谢谢!

4

4 回答 4

5

我发现了一种不使用私有 API 组件的 OS 3.0 技术。

您可以注册以接收 MPAVControllerTimeDidJumpNotification 通知并从该通知的 userInfo 字典中获取 MPAVControllerTimeParameter NSNumber。

例如,在您开始播放之前注册接收通知:

#define MPAVControllerTimeDidJumpNotification @"MPAVControllerTimeDidJumpNotification"

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

然后开始播放电影。添加一个在电影播放时每次更改都会调用的方法:

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

当电影停止播放时(您可以通过侦听 MPMoviePlayerPlaybackDidFinishNotification 通知来了解这一点)停止侦听 MPAVControllerTimeDidJumpNotification 通知。

于 2009-07-30T00:30:57.873 回答
2

此问题与此处的以下其他问题重复或相关:

重申这些问题的答案,目前没有公共 API 可以在特定帧或时间点开始播放电影。虽然有可用的私有 API (-currentTime-setCurrentTime),但它们可能会发生变化,并且会在批准过程中导致您的应用被拒绝。

于 2009-07-29T01:01:01.680 回答
1
    `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;

您可以使用它来设置/获取变量并使用它在正确的时间开始播放电影。即使用户重新启动手机或重新启动应用程序,这也将起作用。

于 2009-07-31T20:35:11.790 回答
0

斯拉瓦,

实际上,我在电影播放期间观察了系统触发的所有事件,并且没有看到任何其他可能有帮助的东西。MPAVControllerTimeDidJumpNotification 在播放期间确实会定期触发,但不会像每秒那样频繁。它可能会为每个关键帧触发,但我不确定。

于 2009-07-30T20:56:25.077 回答