Como você faz o iPhone vibrar para durações arbitrárias?
Pergunta
No firmware do iPhone 2.x, você pode fazer o iPhone vibrar para outras durações que não sejam definidas pelo sistema:
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
Nos telefones jailbreak, você costumava usar o Meca.Framework para fazer isso:
MeCCA_Vibrator *v = new MeCCA_Vibrator;
v->activate(1);
sleep(5);
v->deactivate();
Mas Mecca.Framework não existe no meu iPhone 2.x.
Solução
Sim, isso é algo que causou rejeições no passado, e provavelmente o fará novamente ... o que significa que ainda é possível fazê -lo.
Respondendo à minha própria pergunta, veja como fazer isso:
Adicione a estrutura Coretelephony nas fases de construção.
declarar:
extern void * _CTServerConnectionCreate(CFAllocatorRef, int (*)(void *, CFStringRef, CFDictionaryRef, void *), int *);
extern int _CTServerConnectionSetVibratorState(int *, void *, int, int, float, float, float);
static void* connection = nil;
static int x = 0;
inicializar:
connection = _CTServerConnectionCreate(kCFAllocatorDefault, &vibratecallback, &x);
Iniciar a vibração:
_CTServerConnectionSetVibratorState(&x, connection, 3, intensity, 0, 0, 0);
Parar de vibração:
_CTServerConnectionSetVibratorState(&x, connection, 0, 0, 0, 0, 0);
Este código é de HapticKeyboard, um aplicativo para download que zuze o telefone enquanto você digita. Está disponível para telefones jailbroken em Cydia. Veja também minha experiência com jailbreak)
Alguma outra boa referência?
Outras dicas
Não há como fazer isso usando o SDK, desculpe.
Não é apenas impossível fazer o uso do SDK, mas também é o primeiro item no Critérios de rejeição da loja de aplicativos não oficiais.
O iOS 5 implementou o modo de vibrações personalizadas. Portanto, em alguns casos, a vibração variável é aceitável. A única coisa é desconhecida com o que a biblioteca lida com isso (com certeza não o CoreTelephony) e se estiver aberto para desenvolvedores.