setMicrophoneMute (boolean) funktioniert bei einigen Geräten nicht

8

Ich konnte hier keinen verwandten Beitrag finden (aber andere kleine Beiträge im Internet), also hier ist es:

AudioManager.setMicrophoneMute (boolean) macht auf einigen bestimmten Geräten, mit denen ich getestet habe, nichts aus: Google Nexus S, Samsung Galaxy S und Motorola Milestone. Auf jedem anderen Gerät funktioniert es gut.

Er behält sogar seinen "Status" bei und gibt einen booleschen Wert zurück, als ob er stummgeschaltet / stummgeschaltet wäre, aber er stumm nicht - das Mikrofon nimmt weiterhin auf - sowohl im GSM-Anruf als auch in der programmgesteuerten AudioRecord-Aufnahme. Es gibt keine anzeigende Protokollnachricht.

Ich habe auch mit Berechtigungen (android.permission.MODIFY_AUDIO_SETTINGS, android.permission.RECORD_AUDIO) vermasselt, nichts Neues hier.

Ist das jemand anderem begegnet? Hat jemand eine Workaround oder eine magische Lösung? Wenn ich AudioRecord verwende, implementiere ich einfach meine eigene "Stummschaltung" für diese Geräte - ich gebe die aufgezeichneten Puffer nicht weiter. Aber es kann mir nicht helfen das Mikrofon bei einem GSM Anruf zu stummschalten, was ich brauche.

Danke

---------------- Aktualisierung ----------------

Siehe unten.

    
SirKnigget 07.03.2011, 08:29
quelle

4 Antworten

5

Hi, ich hatte das selbe Problem, ich wollte den Bildschirm für eingehende Anrufe simulieren. und in diesem Bildschirm funktionierte eine Taste, die Stummschalten, und der AudioManager.setMicrophoneMute (boolean) funktionierte auf den meisten Telefonen, aber nicht auf allen. Ich habe einen Weg gefunden, um es zu umgehen. Ich simuliere einen Druck auf die Stummschalttaste an der Freisprecheinrichtung. es hat funktioniert, ich hoffe, es wird dir auch helfen Hier ist der Code:

%Vor%     
Isabella 23.02.2012, 08:41
quelle
5

Ich hatte dieses Problem, weil ich M4A-Dateien bearbeiten wollte, die AAC-Audiodaten enthielten. Ich wollte in der Lage sein, sie zusammenzuführen und Stille als Polsterung hinzuzufügen. Aufgrund der unterschiedlichen Anzahl von Millisekunden pro Frame über verschiedene Geräte entschied ich mich, das Mikrofon stummzuschalten und eine Sekunde Stille aufzuzeichnen. Wiederholen Sie das immer und immer wieder, wenn ich Stille puffern musste. (M4A + AAC Stille ist viel komplizierter als rohe PCM).

Leider habe ich viele Unterschiede bei der Stummschaltung von Android-Geräten festgestellt. Hier ist, was ich gelernt habe:

  • Das Stummschalten wird automatisch fehlschlagen, wenn Sie nicht die Berechtigung MODIFY_AUDIO_SETTINGS verwenden. Keine Fehlermeldung, es wird nur nicht stummgeschaltet
  • Das Samsung Galaxy Tab 10.1 und Motorola Xoom funktionieren wie erwartet. Rufen Sie audioManager.setMicrophoneMute (true) zum Stummschalten und audioManager.setMicrophoneMute (false) zum Stummschalten auf
  • auf
  • Das HTC Inspire (mit CyanogenMod 7) und Motorola Droid X werden fälschlicherweise fälschlicherweise zu audioManager.isMicrophoneMute zurückkehren, sind aber nicht stummgeschaltet. Um dies zu beheben, rufen Sie vor dem Stummschalten den Befehl audioManager.setMode (AudioManager.MODE_IN_CALL) auf. Stellen Sie sicher, dass Sie den Modus wieder auf den ursprünglichen Zustand zurücksetzen, nachdem Sie die Stummschaltung beendet haben. Ich bin mir nicht sicher, aber es könnte Probleme mit anderen Apps geben, wenn Sie den falschen Modus wählen.
  • Das HP Touchpad, das von CyanogenMod 7 auf DualBoot gehackt wurde, mag überhaupt kein Muting. Es erzeugt nutzlose Aufnahmedateien, und Aufrufe von audioManager.setMode () benötigen fünf Sekunden, um zurückzukehren.
  • Das HTC MyTouch 4G behauptet, es sei stummgeschaltet, stumm selbst aber nicht unter irgendwelchen Bedingungen, die ich finden kann.
  • Das HTC Flyer stummgeschaltet, aber sobald Sie mediaRecorder.start () oder mediaRecorder.stop () aufrufen, wird die Stummschaltung aufgehoben. Sie können es wieder stummschalten, fangen aber möglicherweise erst einen Bruchteil einer Sekunde ein.
  • Gingerbread-Geräte, ob Sie sie wollen oder nicht, haben zu Beginn jeder MediaRecorder-Aufnahme zwischen einer halben und einer Sekunde Stille. Die Gesamtaufnahme hat die richtige Länge, dieser erste Teil wird nur zum Schweigen gebracht, anstatt zu erfassen, was das Mikrofon zu der Zeit empfangen hat.

In meinem Fall, um eine Stille-Datei mit der entsprechenden Anzahl von Millis pro Frames zu erzeugen, die das gegebene Gerät verwendet (also kompatibel mit anderen Audio-Dateien), verwende ich einen ähnlichen Code:

%Vor%

Ist das eine vollständige Lösung? Nein. Einige Geräte werden NICHT stummgeschaltet. Andere Geräte, wie das zuvor erwähnte HP Touchpad, verursachen alle neuen Probleme, wenn Sie sogar versuchen, stumm zu schalten. Hoffentlich werden diese Tipps zumindest dazu beitragen, dass Menschen auf den meisten Android-Geräten stummgeschaltet werden.

    
Chad Schultz 20.03.2012 19:29
quelle
3

Es wurde keine Lösung gefunden. Wenn das aufgezeichnete Audio als Datenpuffer verwendet wird, verwenden Sie stille PCM-Daten (mit Nullen füllen). Wenn Sie einen normalen Telefonanruf programmgesteuert stummschalten müssen, informieren Sie den Benutzer, dass dieses Gerät auf dem Anrufbildschirm manuell stummgeschaltet werden muss.

Ich betrachte dies als die endgültige Antwort, aber bitte überraschen Sie mich.

    
SirKnigget 03.07.2011 09:36
quelle
2

kannst du damit versuchen:

%Vor%     
Toske87 09.03.2012 23:26
quelle

Tags und Links