当项目开始播放AVQueuePlayer时振动

时间:2013-06-06 18:17:28

标签: iphone ios objective-c avaudioplayer

我有一个AVQueuePlayer,我在运行时添加了一些项目。

NSArray *queue = [self.queuePlayer items];
if ([self.queuePlayer canInsertItem:sound afterItem:[queue lastObject]]) [self.queuePlayer insertItem:sound afterItem:[queue lastObject]];

初始化AVQueuePlayer时未添加任何项目。我所做的只是一个alloc init。我还会在他们查看加载后立即发送播放消息,这样当添加新项目时它会立即开始播放。

我想在新项目开始播放时让手机振动。

我正在检查在线文档,我发现的唯一有趣的事情是在项目结束时发送的通知。

AVPlayerItemDidPlayToEndTimeNotification

有解决方法吗?

2 个答案:

答案 0 :(得分:1)

来自AVPlayer Class Reference

  

您可以使用键值观察来观察玩家的状态。

其他一些细节:

  

为了能够安全地添加和删除观察者,AVPlayer会序列化在调度队列中回放期间动态发生的更改的通知。默认情况下,此队列是主队列(请参阅dispatch_get_main_queue)。为了确保在报告播放状态的动态变化时安全访问播放器的非原子属性,您必须使用接收器的通知队列序列化访问。在通常情况下,通过在主线程或队列上调用AVPlayer的各种方法,可以自然地实现这种序列化。

这是一个简单的例子。创建播放器时,请注册以获得状态更改通知:

[self.queuePlayer addObserver:self forKeyPath:@"status" options:kNilOptions context:nil];   

然后,添加此方法,当queuePlayer的{​​{1}}更改时将调用此方法:

status

(我不确定你想要的确切振动行为,但希望这能指出你正确的方向。)

答案 1 :(得分:0)

有两个看似相似的函数采用参数kSystemSoundID_Vibrate:

1)AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); 2)AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

这两个函数都会使iPhone振动。但是当您在不支持振动的设备上使用第一个功能时,它会发出哔声。另一方面,第二个功能对不支持的设备没有任何作用。因此,如果您要持续振动设备,作为警报,常识说,请使用功能2。

另请参阅“iPhone教程:检查iOS设备功能的更好方法”一文。

首先,在构建阶段中将AudioToolbox框架(AudioToolbox.framework)添加到目标中。

然后,要导入的头文件:

#import <AudioToolbox/AudioServices.h>