vibracion vibra solo silencio poner pone como ios objective-c iphone cocoa-touch audio

ios - solo - vibracion iphone 6



Cómo detectar iphone está en modo silencioso (4)

La razón por la que el código de Pirripli no funciona es porque el simulador no admite la prueba y el código no verifica si hay errores. El código corregido se vería así:

CFStringRef state = nil; UInt32 propertySize = sizeof(CFStringRef); AudioSessionInitialize(NULL, NULL, NULL, NULL); OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state); if (status == kAudioSessionNoError) { return (CFStringGetLength(state) == 0); // YES = silent } return NO;

Estoy desarrollando una aplicación. ¿En eso quiero detectar a través de la codificación que "iPhone está en modo silencioso o no?". Lo estoy desarrollando usando cacao con Objective-C.

Si alguien sabe, amablemente responde.


Es posible al probar una ruta de audio NULL usando AudioToolBox:

UInt32 routeSize = sizeof (CFStringRef); CFStringRef route; AudioSessionGetProperty ( kAudioSessionProperty_AudioRoute, &routeSize, &route ); if (route == NULL) { NSLog(@"Silent switch is on"); }

Si la ruta es NULL, entonces no hay salidas de audio disponibles. Si se trata de "Auriculares" o "Auriculares", el interruptor de timbre silencioso aún podría estar encendido. Sin embargo, nunca estará activado cuando esté configurado en "Altavoz".

Probablemente sea la mejor prueba para esto en su escucha de propiedad de cambio de ruta de audio, que se establece a continuación:

AudioSessionAddPropertyListener ( kAudioSessionProperty_AudioRouteChange, audioRouteChangeListenerCallback, self );

Nota: Si está haciendo algo funky como anular las rutas de audio, entonces esta respuesta puede no aplicarse.

Configurar y destruir una sesión de audio en su totalidad probablemente esté más allá del alcance de esta respuesta.


Para completar, construyendo este enlace de Dan Bon, implemento el siguiente método para resolver este problema en mis aplicaciones. Una cosa a tener en cuenta es que primero el código busca el simulador de iPhone: la ejecución del código a continuación bloqueará el simulador. Alguien sabe por qué?

-(BOOL)silenced { #if TARGET_IPHONE_SIMULATOR // return NO in simulator. Code causes crashes for some reason. return NO; #endif CFStringRef state; UInt32 propertySize = sizeof(CFStringRef); AudioSessionInitialize(NULL, NULL, NULL, NULL); AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state); if(CFStringGetLength(state) > 0) return NO; else return YES; }

Declarando esto bien en el controlador de vista, simplemente verifica

if ([self silenced]) { NSLog(@"silenced"); else { NSLog(@"not silenced"); }

O, obviamente, podrías declararlo en algún tipo de clase de ayuda. Una solución más elegante podría ser una adición de categoría en UIApplication o alguna otra clase ...


Puede usar la propiedad Audio Route como lo sugirieron las respuestas anteriores, pero tenga en cuenta que: - Funciona solo si la Categoría de audio es AmbientSound. No debe inicializar Audio Session más de una vez en su aplicación (consulte la Guía de programación de la sesión de audio). Debes liberar esos CFStringRef para evitar fugas de mem

En el caso de que la categoría de audio actual no sea AmbientSound, puede pensar en cambiarla temporalmente, realizar la comprobación en la propiedad Ruta de audio y luego restaurar la Categoría de audio original.

Tenga en cuenta que cambiar la categoría de audio restablecerá la ruta de audio predeterminada para esa categoría, dada la configuración de hardware actual (es decir, si hay auriculares conectados o no, etc.).