是否可以为用户通知警报创建自定义振动模式?例如,我们可以选择为用户通知提供不同的音频。是否也可以定制振动模式?
我的意思是在iOS上使用swift以编程方式执行此操作。
答案 0 :(得分:0)
用于在iOS中创建自定义振动。使用AudioServicesPlaySystemSoundWithVibration和AudioServicesStopSystemSound。
心跳振动示例
NSMutableDictionary* pulsePatternsDict = [@{} mutableCopy];
NSMutableArray* pulsePatternsArray = [@[] mutableCopy];
// beat for 100 times
for (NSInteger i=0; i<100; i++){
[pulsePatternsArray addObject:@(YES)]; // vibrate for 100ms
[pulsePatternsArray addObject:@(100)];
[pulsePatternsArray addObject:@(NO)]; //stop for 1200ms * 0.3
[pulsePatternsArray addObject:@(1200*0.3)];
[pulsePatternsArray addObject:@(YES)]; //vibrate for 100ms
[pulsePatternsArray addObject:@(100)];
[pulsePatternsArray addObject:@(NO)]; //stop for 1200ms * 0.5
[pulsePatternsArray addObject:@(1200*0.5)];
}
[pulsePatternsDict setObject:pulsePatternsArray forKey:@"VibePattern"];
[pulsePatternsDict setObject:[NSNumber numberWithInt:1.0] forKey:@"Intensity"];
AudioServicesPlaySystemSoundWithVibration(kSystemSoundID_Vibrate, nil, pulsePatternsDict);
但只有调用此(AudioServicesPlaySystemSoundWithVibration)才能使振动永不停止。所以我必须找到一些功能来阻止它。
答案是AudioServicesStopSystemSound
。它也是AudioToolbox框架中的私有函数。
该功能的声明就像
void AudioServicesStopSystemSound(SystemSoundID inSystemSoundID)
注意: AudioServicesPlaySystemSoundWithVibration
仅适用于iOS6
iOS 9和iOS 9.1目前没有公开的API。
在 iOS 10 中,有一个名为UIFeedbackGenerator
的新API。有关详细信息,请参阅此post。它目前仅适用于iPhone 7和iPhone 7 Plus。
免责声明:有一种方法可以直接与Taptic Engine(iOS 9)进行交互,但有一种私有方法。您不应该在App Store应用程序中使用它。
答案 1 :(得分:0)
您可以尝试一下。在下面的代码中,您可以在有声和无声的情况下获得不同类型的振动。确保已导入这些文件(导入AudioToolbox,导入AVFoundation)
if(selectedRow == 0){
AudioServicesPlaySystemSound(SystemSoundID(1304))
}else if(selectedRow == 1){
AudioServicesPlaySystemSound(SystemSoundID(1329))
}else if(selectedRow == 2){
AudioServicesPlaySystemSound(SystemSoundID(1301))
}else if(selectedRow == 3){
AudioServicesPlaySystemSound(SystemSoundID(1027))
}else if(selectedRow == 4){
AudioServicesPlaySystemSound(SystemSoundID(1028))
}else if(selectedRow == 5){
let alert = SystemSoundID(1011)
AudioServicesPlaySystemSoundWithCompletion(alert, nil)
}else if(selectedRow == 6){
AudioServicesPlaySystemSound(SystemSoundID(1333))
}else if(selectedRow == 7){
AudioServicesPlaySystemSound(SystemSoundID(4095))
}