Kann den Lautsprecher auf dem iPad nicht steuern

8

Ich habe eine Methode verfolgt, die sich um meinen Sprecherzustand kümmert:

AudioSession.h

%Vor%

MeineKlasse

%Vor%

Aber funktioniert nur auf dem iPhone , für iPad - nichts passiert.

  • Wenn ich auf den Knopf Speaker On drücke, gebe ich in if(enable) ein und AudioSessionSetProperty empfängt kAudioSessionOverrideAudioRoute_Speaker ;

  • Wenn ich auf den Knopf Speaker Off drücke, gebe ich in else ein und AudioSessionSetProperty empfängt kAudioSessionOverrideAudioRoute_None ;

Ich habe angefangen zu debuggen und finde keinen Unterschied zwischen Geräten.

Ich habe iPad2 iOS 6.1.

Habe ich etwas verpasst?

bitte, hilf mir

Bearbeiten

Wie LombaX sagt, habe ich bei der Startanwendung AVAudioSession category:

hinzugefügt %Vor%

success = YES

Funktioniert immer noch nicht.

    
Maxim Shoustin 26.04.2013, 07:19
quelle

2 Antworten

8

Ich glaube, Sie missverstehen die Verwendung dieser Eigenschaft. Sie hoffen, Ihren Lautsprecher zu aktivieren / deaktivieren. Das ist nicht die Absicht von kAudioSessionProperty_OverrideAudioRoute . Es wirkt sich eher auf den Output-Sound routing aus.

Dies sind die verschiedenen möglichen Ausgangswege für das iPhone

%Vor%

Dies sind nur mögliche Routen - was tatsächlich verfügbar ist, hängt vom Kontext ab. Apple schränkt die Möglichkeit, diese Routen in App zu bestimmen, stark ein, da der Benutzer dies auf gerätespezifische Weise steuern muss. Die meisten von ihnen werden implizit vom Benutzer beim Ein- / Ausstecken von Hardware (Kopfhörer, USB, HDMI, Line Out) bestimmt, und Apple möchte nicht, dass Ihre App hier die Erwartungen der Nutzer erfüllt.

Airplay kann mit MPVolumeView s routeButton ausgewählt werden, wenn der Medienkontext korrekt ist (und Airplay verfügbar ist). Bluetooth kann von OverrideCategoryEnableBluetoothInput () gesteuert werden, das sowohl die Eingabe als auch die Ausgabe steuert )

Beachten Sie insbesondere, dass kAudioSessionOutputRoute_BuiltInReceiver der Low-Level-Lautsprecher auf dem iPhone ist, den Sie bei einem Telefonanruf an Ihr Ohr halten. Dies ist die Standard-Audio-Ausgangsroute für das iPhone, wenn ein externes Gerät (z. B. Kopfhörer) nicht angeschlossen ist.% Co_de% ist der Lautstärkeregler "Freisprechen" am unteren Rand des Telefons.

Sie können den aktuellen Standard für diese kAudioSessionOutputRoute_BuiltInSpeaker umleiten, indem Sie eine dieser Überschreibungseigenschaften festlegen:

%Vor%
  

Gibt an, ob die normale Audio-Route der Audio-Session-Kategorie überschrieben werden soll.

%Vor%
  

Gibt an, ob Audio an den Lautsprecher weitergeleitet wird (statt an den Empfänger), wenn keine andere Audio-Route, z. B. ein Headset, angeschlossen ist.

Beide sind nur für die Verwendung mit der Kategorie BuiltInSpeaker Audio Session vorgesehen.

Beachten Sie, dass Sie in beiden Fällen nicht zwischen einer Ausgangsroute wählen, sondern nur die "Standardroute" zugunsten des eingebauten (lauten) Lautsprechers.

Das iPad, dem ein Telefon fehlt, hat keinen kAudioSessionCategory_PlayAndRecord -Typ des Lautsprechers. Es ist Standard Route, in Abwesenheit von verbundenen Gadgets oder Airplay, ist das gleiche BuiltInReceiver . Daher hat das Überschreiben keine Auswirkung.

Wenn Sie annehmen, dass Sie wirklich versuchen, den Ton in Ihrer App stummzuschalten, hängt es von vielen anderen Aspekten Ihres App-Designs ab, wie Sie das erreichen. Wenn Sie das Gerät stummschalten möchten, würde Apple dies lieber über den Ring / Silent-Switch steuern. Es scheint, sie würden es nicht anders haben:

  

Ich habe eine Antwort von Apple bekommen.   Sie haben gesagt, dass sie keine Methode für die Erkennung von Hardware-Stummschaltung bereitgestellt haben und dies auch nicht beabsichtigen. Ссылка

" Die Lautsprechereinstellung ist ein Overide für das Gerät, nicht für einen bestimmten Sound "
Ссылка

    
foundry 01.05.2013, 04:19
quelle
2

Haben Sie versucht, die Audio-Kategorie vor dem Abspielen einzustellen? Ich erinnere mich, dass ich vor einer Weile das gleiche Problem hatte und diese Lösung fand (passe die Kategorie an)

%Vor%

Ich habe nichts in der Dokumentation gefunden, ich denke, dass Sie auf dem iPad die Kategorie einstellen müssen, weil iPhone und iPad sich um ein Detail unterscheiden: Auf dem iPhone kann der linke Hardware-Schalter den Lautsprecher stummschalten. Auf dem iPad wird derselbe Schalter zum Sperren der Drehung verwendet.

Versuchen Sie es und lassen Sie es mich wissen

BEARBEITEN:

nützlicher Link:

Ссылка

    
LombaX 29.04.2013 15:58
quelle

Tags und Links