cocoa-touch - plus - no me escuchan cuando hablo por mi iphone 6
Cómo detectar el permiso de entrada del micrófono rechazado en iOS 7 (4)
Me gustaría detectar cuando un usuario rechazó el permiso de micrófono en mi aplicación de iOS. Solo obtengo este valor cuando intento grabar el micrófono: -120.000000 db
Pero antes de obtener esto tengo que configurar una sesión AVAudioSession. ¿Hay otra función?
Y recibí este mensaje en la salida: Microphone input permission refused - will record only silence
Gracias.
No estoy 100% seguro si podemos hablar de iOS 7 fuera de los devforums de Apple, pero encontré la respuesta que está buscando allí .
En resumen, encontrará su solución en el archivo de encabezado AVAudioSession.h en el SDK. Y si desea utilizarlo mientras aún admite iOS 6, asegúrese de usar " respondsToSelector:
" para verificar la disponibilidad de la API.
Si todavía está compilando con iOS SDK 6.0 (como yo), tiene que ser un poco más indirecto que @Luis E. Prado, ya que el método requestRecordPermission no existe.
Así es como lo hice. Retire el bit de liberación automática si está usando ARC. En iOS6 no ocurre nada, y en iOS7 se registra el mensaje "el micrófono está habilitado" o aparece la alerta.
AVAudioSession *session = [AVAudioSession sharedInstance];
if ([session respondsToSelector:@selector(requestRecordPermission:)]) {
[session performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
if (granted) {
// Microphone enabled code
NSLog(@"Microphone is enabled..");
}
else {
// Microphone disabled code
NSLog(@"Microphone is disabled..");
// We''re in a background thread here, so jump to main thread to do UI work.
dispatch_async(dispatch_get_main_queue(), ^{
[[[[UIAlertView alloc] initWithTitle:@"Microphone Access Denied"
message:@"This app requires access to your device''s Microphone./n/nPlease enable Microphone access for this app in Settings / Privacy / Microphone"
delegate:nil
cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil] autorelease] show];
});
}
}];
}
EDITAR : Resulta que el bloque withObject se ejecuta en un hilo de fondo, por lo que NO hagas ningún trabajo de UI allí, o tu aplicación puede bloquearse. Ajusté el código de arriba. Un cliente señaló esto en lo que afortunadamente fue una versión beta. Disculpas por el error.
Swift respuesta:
if AVAudioSession.sharedInstance().recordPermission() == .Denied {
print("Microphone permission refused");
}
O puede usar framework como PermissionScope que permite verificar permisos fácilmente. https://github.com/nickoneill/PermissionScope
Editar: Swift 3 respuesta:
import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
print("Microphone permission refused");
}
Tenga en cuenta que esto solo funcionará si está construido con Xcode 5, y no con 4.6
Agregue el marco de AVFoundation a su proyecto
A continuación, importe el archivo de encabezado AVAudioSession, desde el marco de AVFoundation, donde tiene la intención de verificar si la configuración del micrófono está habilitada.
#import <AVFoundation/AVAudioSession.h>
Entonces simplemente llame a este método
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
La primera vez que se ejecuta este método, se mostrará el mensaje para permitir el acceso del micrófono y, en función de la respuesta de los usuarios, ejecutará el bloque de finalización. A partir de la segunda vez, solo actuará en función de la configuración almacenada en el dispositivo.