Ich muss meine Audio abhängig davon ändern, ob Kopfhörer angeschlossen sind oder nicht. Ich kenne kAudioSessionProperty_AudioInputAvailable, die mir sagen, ob es ein Mikrofon gibt, aber Ich möchte auf jeden Kopfhörer testen, nicht nur auf Kopfhörer mit eingebautem Mikrofon. Ist das möglich? HierErmitteln, ob Kopfhörer (nicht Mikrofon) an ein iOS-Gerät angeschlossen sind
Antwort
ist eine Methode meiner eigenen, das ist eine leicht modifizierte Version eines auf dieser Website: http://www.iphonedevsdk.com/forum/iphone-sdk-development/9982-play-record-same-time.html
- (BOOL)isHeadsetPluggedIn {
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;
OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
&routeSize,
&route);
/* Known values of route:
* "Headset"
* "Headphone"
* "Speaker"
* "SpeakerAndMicrophone"
* "HeadphonesAndMicrophone"
* "HeadsetInOut"
* "ReceiverAndMicrophone"
* "Lineout"
*/
if (!error && (route != NULL)) {
NSString* routeStr = (NSString*)route;
NSRange headphoneRange = [routeStr rangeOfString : @"Head"];
if (headphoneRange.location != NSNotFound) return YES;
}
return NO;
}
das scheint nur nicht zu funktionieren :(kümmern sich um Ihre Antwort zu aktualisieren? – binnyb
was nicht funktioniert? Kompilieren nicht? Ich verwende dieses Stück Code in einem Spiel und es funktioniert für mich. – jptsetung
NO wird immer zurückgegeben, unabhängig Wenn meine Kopfhörer angeschlossen sind – binnyb
ich mit dem Code Gestartet von jpsetung oben angegebenen, aber es gab ein paar Probleme mit ihm für meinen Anwendungsfall:
- Kein Nachweis von so genannten
kAudioSessionProperty_AudioRoute
in der Dokumentation - Leaks
route
- Kein Audio Session Check
- String-Check für Kopfhörer statt logische Wahrnehmung der Kategorien
- Ich war mehr daran interessiert, ob das iPhone seine Lautsprecher verwendet, mit "Kopfhörer" bedeutet "alles andere als Lautsprecher". Ich denke, dass das Auslassen von Optionen wie "Bluetooth", "Airplay" oder "Lineout" gefährlich ist.
Diese Implementierung erweitert den Scheck für jede Art von bestimmten Ausgang zu ermöglichen:
BOOL isAudioRouteAvailable(CFStringRef routeType)
{
/*
As of iOS 5:
kAudioSessionOutputRoute_LineOut;
kAudioSessionOutputRoute_Headphones;
kAudioSessionOutputRoute_BluetoothHFP;
kAudioSessionOutputRoute_BluetoothA2DP;
kAudioSessionOutputRoute_BuiltInReceiver;
kAudioSessionOutputRoute_BuiltInSpeaker;
kAudioSessionOutputRoute_USBAudio;
kAudioSessionOutputRoute_HDMI;
kAudioSessionOutputRoute_AirPlay;
*/
//Prep
BOOL foundRoute = NO;
CFDictionaryRef description = NULL;
//Session
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
AudioSessionInitialize(NULL, NULL, NULL, NULL);
});
//Property
UInt32 propertySize;
AudioSessionGetPropertySize(kAudioSessionProperty_AudioRouteDescription, &propertySize);
OSStatus error = AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &propertySize, &description);
if (!error && description) {
CFArrayRef outputs = CFDictionaryGetValue(description, kAudioSession_AudioRouteKey_Outputs);
CFIndex count = CFArrayGetCount(outputs);
if (outputs && count) {
for (CFIndex i = 0; i < count; i++) {
CFDictionaryRef route = CFArrayGetValueAtIndex(outputs, i);
CFStringRef type = CFDictionaryGetValue(route, kAudioSession_AudioRouteKey_Type);
NSLog(@"Got audio route %@", type);
//Audio route type
if (CFStringCompare(type, routeType, 0) == kCFCompareEqualTo) {
foundRoute = YES;
break;
}
}
}
} else if (error) {
NSLog(@"Audio route error %ld", error);
}
//Cleanup
if (description) {
CFRelease(description);
}
//Done
return foundRoute;
}
wie so verwendet:
if (isAudioRouteAvailable(kAudioSessionOutputRoute_BuiltInSpeaker)) {
//Do great things...
}
Sehen Sie sich '- [AVAudioSession currentRoute]' für eine Objective-C-Schnittstelle zu diesen Informationen ab iOS 6.0 an. –
Definitiv eine gute Anmerkung, aber nur wenn Sie AVFoundation verlinken (der obige Code ist für AudioToolbox) – SG1
Nur ein Heads für zukünftige Leser dieses Beitrags auf. Link
- (BOOL)isHeadsetPluggedIn
{
AVAudioSessionRouteDescription *route = [[AVAudioSession sharedInstance] currentRoute];
BOOL headphonesLocated = NO;
for(AVAudioSessionPortDescription *portDescription in route.outputs)
{
headphonesLocated |= ([portDescription.portType isEqualToString:AVAudioSessionPortHeadphones]);
}
return headphonesLocated;
}
einfach an:
Die meisten der AVToolbox Methoden haben mit der Veröffentlichung von iOS 7 ohne Alternative so Audio-Hörer sind jetzt weitgehend redundanz
Hier ist eine Lösung auf rob mayoff Kommentar basiert veraltet das AVFoundation-Framework.
Großartig !!!! Perfekt arbeiten. :) –
- 1. Ermitteln, ob Kopfhörer angeschlossen sind oder nicht über VBScript
- 2. Erkennen, ob Kopfhörer an das iPhone angeschlossen sind
- 3. Android: Prüfen, ob Kopfhörer eingesteckt sind
- 4. Gibt es ein Ereignis für den Fall, dass die Kopfhörer nicht angeschlossen sind?
- 5. Überprüfen Sie, ob Kopfhörer eingesteckt sind
- 6. Überprüfen, ob ein Drucker angeschlossen ist
- 7. Die Ansicht ist nicht an ein Fenster angeschlossen
- 8. Ermitteln, ob ASP.NET-Sitzungen aktiviert sind
- 9. Ermitteln, ob zwei Scheitelpunkte verbunden sind jGraphX
- 10. Android - So erkennen Sie, ob ein Headset ein Mikrofon hat
- 11. Fehler: Ansicht nicht an Fenstermanager angeschlossen
- 12. Pfad der USB-Geräte, die an die Maschine angeschlossen sind?
- 13. Überprüfen, ob der Benutzer sein Mikrofon eingesteckt hat
- 14. Ermitteln, ob ein Element ein Formularfeld ist
- 15. Wie kann ich überprüfen, ob ein Drucker physisch an meinen PC angeschlossen ist?
- 16. tmux Ermitteln, ob ein Fensterbereich markiert ist
- 17. iPhone AudioServicesPlaySystemSound: Route über Kopfhörer?
- 18. Ermitteln Sie, ob ein Ereignis mit
- 19. Android - Wie testen, ob das Mikrofon funktioniert
- 20. Mikrofon simulieren (virtuelles Mikrofon)
- 21. Liste der IP-Adressen aller Computer, die an ein einzelnes LAN angeschlossen sind
- 22. So ermitteln Sie, ob das Laufwerk ein externes Laufwerk ist
- 23. Wie kann ich überprüfen, ob das Gerät an ein Netzteil, USB oder an ein Dock angeschlossen ist?
- 24. Kopfhörer Jack Listener Android
- 25. Kopfhörer-Tastensteuerung in Titan
- 26. Wie erkennt man, ob ein Mikrofon in Android vorhanden ist?
- 27. Wie kann man zählen, wie viele Listener an ein Ereignis angeschlossen sind?
- 28. Ermitteln, ob ein Objekt Müll gesammelt wurde
- 29. Überprüfen, ob das Gerät "angeschlossen"/verfügbar ist
- 30. Ermitteln, ob zwei Zeichenketten in Javascript ähnlich sind?
@Brad Larson Die Antwort auf diese Frage gab mir nicht die Informationen, die ich brauche. Meine Frage spezifiziert _headphones_, kein Mikrofon. Ich glaube, die akzeptierte Antwort auf die Frage, die Sie verknüpft haben, beschreibt, wie man erkennt, ob ein Mikrofon eingesteckt ist. – morgancodes
Ja, ich denke, Sie fragen nach einer Verfeinerung dieser Frage, bei der das Erkennen der Audioeingabe nicht gut genug ist. Vielleicht könnten einige der Diskussionen um [diese Frage] (http://stackoverflow.com/questions/1238758/how-can-i-detect-if-headphones-are-connected-to-an-ipod-touch-g1) möglicherweise auch hilfreich sein. –
Danke, dass Sie mich auf diese Frage hingewiesen haben. – morgancodes