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 Funktion

    onClick(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 Funktion

    setMicrophoneMute(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 : ");
                }
    
            }
    

Log in to reply