用户通知:自定义振动模式

时间:2017-07-14 11:07:46

标签: ios swift usernotifications iphone-vibrate

是否可以为用户通知警报创建自定义振动模式?例如,我们可以选择为用户通知提供不同的音频。是否也可以定制振动模式?

我的意思是在iOS上使用swift以编程方式执行此操作。

2 个答案:

答案 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))
        }