Handy Mikrofon kontrollieren (Android Studio)
-
Zunächst hoffe ich, dass ich hierfür das richtige Forum
ausgewählt habe. Ich konnte es nirgendwo richtig einordnen
und habe mich von daher für dieses entschieden.Ich arbeite derzeit an einer App mit der ich das Mikrofon
kontrollieren möchte. Ich möchte das Mikrofon bei Bedarf
an- und ausschalten können und das auch wenn ein Anruf läuft.
Schalte ich das Mikrofon während des Anrufs über die App aus, sollte
dieses auch tatsächlich aus sein bzw. mein Gesprächspartner sollte mich
nicht mehr hören können.Ich habe auch schon eine App geschrieben. Ich habe von der Klasse
MediaRecorder Gebrauch gemacht. In der wird über das Mikrofon
Sound aufgenommen und in einer Datei gespeichert. Leider habe ich es bisher
nicht geschafft, mich nur auf das Ein- und Ausschalten zu beschränken, da
sonst Exceptions auftreten, welche ich bisher nicht beheben konnte.
Zwar schieße ich damit über das Ziel hinaus, wenn ich den Sound in einer
Datei speichern lasse, aber es funktioniert scheinbar.Ich habe die Funktion getestet indem ich mit jmd telefoniert habe. Dann
habe ich während des Anrufs über die App die Ausschaltfunktion betätigt.
Leider hat es nicht geklappt. Mein Gesprächspartner konnte mich immer noch hören.(Mir war schon klar, dass es nicht so einfach wird).Ich habe wirklich sorgfältig recherchiert, aber bisher konnte
ich nichts zu diesem Problem finden.Es muss doch möglich sein, das Mikrofon einfach nur zu deaktivieren oder nicht??
Hier ist der wesentliche Code der App:
(Die gesamte Funktionalität, also das Steuern des Mikrofons
geschieht wenn ich den Button klicke. Von daher denke ich, dass
es reicht wenn ich nur die FunktiononClick(View v)
poste.
if(v.getId() == R.id.onButton) { System.out.println("Start Recording"); mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile(fileName); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { mRecorder.prepare(); } catch (IOException e) { e.printStackTrace(); } try { mRecorder.start(); } catch(Exception e) { System.out.println("Fehler bei start() : " + e); } } else { System.out.println("Stop Recording"); mRecorder.stop(); mRecorder.release(); }
Ich hoffe jemand kann mir, bei der Lösung des Problems, helfen.
Danke für alle Leser und für alle Antworten!
-
Okay Leute ich habe es geschafft! Ich bin den falschen Weg gegangen, bzw. ich hab in der falschen Klasse gesucht.
Die Lösung des Problems liegt in der Klasse AudioManager.
Ich benutze die FunktionsetMicrophoneMute(boolean);
Hier der Code der zum Ein- und Ausschalten nötig ist:
AudioManager aManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int originalMode = aManager.getMode(); ... if(v.getId() == R.id.onButton) { System.out.println("Microphone unmuted"); aManager.setMode(originalMode); aManager.setMicrophoneMute(false); } else { try { System.out.println("Microphone muted"); aManager.setMode(AudioManager.MODE_IN_COMMUNICATION); aManager.setMicrophoneMute(true); } catch(Exception e) { System.out.println("Error muting : "); } }