Sprawianie, że iPhone wibruje

Jak można raz ustawić iPhone ' a na wibracje?

Na przykład, gdy gracz traci życie lub gra się kończy, iPhone powinien wibrować.

Author: Juan Boero, 2011-01-18

12 answers

From " iPhone Tutorial: lepszy sposób na sprawdzenie możliwości urządzeń z systemem iOS":

Istnieją dwie pozornie podobne funkcje, które przyjmują parametr kSystemSoundID_Vibrate:

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
[[4]} obie funkcje wibrują iPhone ' a. Ale kiedy używasz pierwszego działa na urządzeniach, które nie obsługują wibracji, odtwarza sygnał dźwiękowy dźwięk. Druga funkcja natomiast nie robi nic na nieobsługiwane urządzenia. Więc jeśli zamierzasz wibrować urządzenie stale, jako alert, zdrowy rozsądek mówi, użyj funkcji 2.

Najpierw dodaj Framework AudioToolbox AudioToolbox.framework do celu w fazie budowania.

Następnie zaimportuj ten plik nagłówkowy:

#import <AudioToolbox/AudioServices.h>
 394
Author: linuxbuild,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-12 05:08:14

Swift 3.0

To samo co 2.0, bez zmian.

Swift 2.0

AudioToolbox prezentuje teraz kSystemSoundID_Vibrate jako typ SystemSoundID, więc kod to:

import AudioToolbox.AudioServices

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)

Zamiast iść przez dodatkowy krok odlewu

(Props to @Dov)

Oryginalna Odpowiedź (Swift 1.x)

A oto, jak to zrobić na Swift (W przypadku, gdy wpadłeś w te same kłopoty, co ja)

Link do AudioToolbox.framework (przejdź do projektu, wybierz cel, buduj fazy, Link binarny z bibliotekami, dodaj tam bibliotekę)

Po zakończeniu:

import AudioToolbox.AudioServices

// Use either of these
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

Tandetne jest to, że SystemSoundID jest w zasadzie typealias (fancy swift typedef) dla UInt32, a kSystemSoundID_Vibrate jest regularnym Int. Kompilator wyświetla błąd podczas próby przerzucania z Int do UInt32, ale błąd brzmi: "nie można przekonwertować na SystemSoundID" , co jest mylące. Dlaczego apple po prostu nie zrobił szybkiego enum jest poza mną.

@aponomarenko wchodzi w szczegóły, moja odpowiedź jest tylko dla Swifterów.

 44
Author: Can,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-09 16:04:08

Prostym sposobem na to jest korzystanie z usług Audio:

#import <AudioToolbox/AudioToolbox.h> 
...    
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
 35
Author: fsaint,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-01 18:08:26

Miałem wielki problem z tym dla urządzeń, które miały wibracje wyłączone w jakiś sposób, ale musieliśmy to działać niezależnie, ponieważ jest to kluczowe dla funkcjonowania naszej aplikacji, a ponieważ jest to tylko liczba całkowita do udokumentowanego wywołania metody, przejdzie walidację. Wypróbowałem więc kilka dźwięków, które były poza dobrze udokumentowanymi tutaj: TUNER88/IOSSYSTEMSOUNDSLIBRARY

Natknąłem się wtedy na 1352, który działa niezależnie od cichego przełącznika lub ustawienia na urządzeniu (Settings->vibrate on ring, vibrate on silent).

- (void)vibratePhone;
{
     if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
     {
         AudioServicesPlaySystemSound (1352); //works ALWAYS as of this post
     }
     else
     {
          // Not an iPhone, so doesn't have vibrate
          // play the less annoying tick noise or one of your own
          AudioServicesPlayAlertSound (1105);
     }
}
 27
Author: Joel Teply,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 11:49:14

Ważna Uwaga: ostrzeżenie o przyszłej deprecjacji.

Od iOS 9.0, Opis funkcjiAPI dla:

AudioServicesPlaySystemSound(inSystemSoundID: SystemSoundID)
AudioServicesPlayAlertSound(inSystemSoundID: SystemSoundID)

Zawiera następującą uwagę:

This function will be deprecated in a future release.
Use AudioServicesPlayAlertSoundWithCompletion or  
AudioServicesPlaySystemSoundWithCompletion instead.

Właściwą drogą będzie użycie któregokolwiek z tych dwóch:

AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate, nil)

Lub

AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate) {
 //your callback code when the vibration is done (it may not vibrate in iPod, but this callback will be always called)
}

Pamiętaj o import AVFoundation

 23
Author: Hugo Alonso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-17 15:18:13

A jeśli używasz frameworka Xamarin (monotouch), po prostu wywołaj

SystemSound.Vibrate.PlayAlertSound()
 5
Author: Wheelie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-29 09:10:54

Podczas moich podróży odkryłem, że jeśli spróbujesz jednej z poniższych opcji podczas nagrywania dźwięku, urządzenie nie będzie wibrować, nawet jeśli jest włączone.

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
[[3]}moja metoda została wywołana w określonym czasie w pomiarze ruchów urządzeń. Musiałem zatrzymać nagranie, a następnie uruchomić je ponownie po wystąpieniu wibracji. Wyglądało to tak.
-(void)vibrate {
    [recorder stop];
    AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
    [recorder start];
}

recorder jest instancją AVRecorder.

Mam nadzieję, że pomoże to innym, którzy mieli ten sam problem wcześniej.
 5
Author: Sebastien Peek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-19 23:54:58

W Języku Swift:

import AVFoundation
...
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
 1
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-07 08:44:33

W iOS 10 i nowszych iPhone ' ach możesz również użyć haptic API. To dotykowe sprzężenie zwrotne jest bardziej miękkie niż AudioToolbox API.

Dla Twojego scenariusza GAME OVER, odpowiednia powinna być informacja zwrotna o wpływie interfejsu użytkownika.

UIImpactFeedbackGenerator(style: .heavy).impactOccurred()

Możesz użyć innych haptycznych stylów sprzężenia zwrotnego .

 1
Author: samwize,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-30 02:53:05

Wszystkie urządzenia mają wbudowany silnik do tworzenia efektów wibracji, a jeśli chcesz tylko szybkich wibracji.

extension UIDevice {
    static func vibrate() {
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
    }
}
Teraz możesz dzwonić w razie potrzeby.
UIDevice.vibrate()
 1
Author: Ravindra Bhati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 12:16:17

W moim przypadku używałem Avcapturession. AudioToolbox był w fazie tworzenia projektu i został zaimportowany, ale nadal nie działał. Aby to działało, przerwałem sesję przed wibracjami i kontynuowałem po tym.

#import <AudioToolbox/AudioToolbox.h>
...
@property (nonatomic) AVCaptureSession *session;
...
- (void)vibratePhone;
{
  [self.session stopRunning];
     NSLog(@"vibratePhone %@",@"here");
    if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
    {
        AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); 
    }
    else
    {
        AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
    }
  [self.session startRunning];
}
 0
Author: Caner Çakmak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 10:47:29

Możesz użyć

1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);

Dla iPhone ' a i kilku nowszych iPodów.

2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

Dla ipadów.

 -4
Author: swathy krishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-30 11:36:03