web-dev-qa-db-de.com

so schalten Sie den Lautsprecher programmgesteuert in Android 4.0 ein/aus

Ich spiele eine Datei über den Mediaplayer ab und möchte Optionen wie Lautsprecher ein/aus, Headset, Bluetooth usw. verwenden .. Ich habe den folgenden Code ausprobiert, der für Android 2.2 funktioniert, aber ich möchte etwas, das auch funktionieren kann 2.2 und 4.0 beides ... Können Sie mir helfen, den Lautsprecher programmgesteuert ein- und auszuschalten und über Kopfhörer zu spielen?

AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    if(isOn){
        audioManager.setMode(AudioManager.MODE_IN_CALL);    
        audioManager.setMode(AudioManager.MODE_NORMAL); 
    }else{
        //Seems that this back and forth somehow resets the audio channel
        audioManager.setMode(AudioManager.MODE_NORMAL);     
        audioManager.setMode(AudioManager.MODE_IN_CALL);        
    }
    audioManager.setSpeakerphoneOn(isOn);

P.S: Ich habe diese Erlaubnis im Manifest erteilt: Android.permission.MODIFY_AUDIO_SETTINGS-Berechtigung 

18
mayuri

So etwas könnte auf einigen Geräten funktionieren (ich habe es nur auf einem XPeria P getestet):

final static int FOR_MEDIA = 1;
final static int FORCE_NONE = 0;
final static int FORCE_SPEAKER = 1;

Class audioSystemClass = Class.forName("Android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
setForceUse.invoke(null, FOR_MEDIA, FORCE_SPEAKER);
// To get back to the default behaviour, use the combination FOR_MEDIA,FORCE_NONE.

Die Kombination FOR_MEDIA, FORCE_SPEAKER wird normalerweise nur intern verwendet, um das FM-Radio-Audio zum Lautsprecher zu leiten (da das FM-Radio erfordert, dass Sie ein verkabeltes Headset/einen Kopfhörer angeschlossen haben, der als Antenne fungiert). Geräte, die nicht über eine UKW-Radio-Funktion verfügen (oder eine alternative Implementierung verwenden), ignorieren möglicherweise diese Kombination von Parametern, sodass diese Methode auf einem solchen Gerät nicht funktioniert.

26
Michael
AudioManager mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 

Button mVolumeButton = (Button)findViewById(R.id.btn_Volume);
        mVolumeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mAudioMgr.isWiredHeadsetOn()){
                    mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
                    mAudioMgr.setWiredHeadsetOn(false);
                    mAudioMgr.setSpeakerphoneOn(true);
                    mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);

                    Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show();
                }else{
                    mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);
                    mAudioMgr.setSpeakerphoneOn(false);
                    mAudioMgr.setWiredHeadsetOn(true);
                    Toast.makeText(getApplicationContext(), "Wired Headset On", Toast.LENGTH_LONG).show();
                }
            }
        });
4
Jatin Patel

Sie können entweder einen hinteren Lautsprecher oder einen vorderen Hörer erwerben.

Wenn kein Zubehör angeschlossen ist;

Verwenden Sie audioManager.setMode(AudioManager.MODE_IN_CALL); & audioManager.setSpeakerphoneOn(false);, um den vorderen Lautsprecher/Ohrhörer zu verwenden. Dies würde jedoch den Ton im Ohrstück nicht über den Lautsprecher wiedergeben. Um den hinteren Lautsprecher zu verwenden, verwenden Sie audioManager.setMode(AudioManager.MODE_NORMAL); & audioManager.setSpeakerphoneOn(true);

Wenn Zubehör angeschlossen ist; Verwenden Sie audioManager.setMode (AudioManager.MODE_IN_CALL). & audioManager.setSpeakerphoneOn (false); Frontlautsprecher/Ohrhörer verwenden. Dies würde jedoch den Ton im Ohrstück nicht über den Lautsprecher wiedergeben. Um den hinteren Lautsprecher zu verwenden, verwenden Sie audioManager.setMode(AudioManager.MODE_IN_CALL); & audioManager.setSpeakerphoneOn(true);

Hinweis: Stellen Sie sicher, dass audioManager.setWiredHeadsetOn(boolean on) und audioManager.setBluetoothScoOn(boolean on) auffalseeingestellt sind, um Audio über den Hörer zu leiten. Stellen Sie entwedertrueein, um das Audio entsprechend zu routen.

3

wenn Sie nur Ihre Freisprecheinrichtung öffnen möchten, schreiben Sie diese Zeile in oncreate () Ihrer Aktivität.

static AudioManager audioManager =  (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
2
Sujith Ks

Problem gelöst. Für alle, die noch nach der Antwort suchen. Nun, das ist kein Fehler, sondern eine knifflige Sache. Sie müssen den PhoneStateListener verwenden

Verwendung dieses Handbuchs: http://danielthat.blogspot.co.il/2013/06/Android-make-phone-call-mit-speaker-on.html

2
myna

Versuche dies.

AudioManager audioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
    if (isOn) {
        isOn = false;
        audioManager.setMode(AudioManager.MODE_IN_CALL);
        audioManager.setMode(AudioManager.MODE_NORMAL);

    } else {
        isOn = true;
        audioManager.setMode(AudioManager.MODE_NORMAL);
        audioManager.setMode(AudioManager.MODE_IN_CALL);

    }
    audioManager.setSpeakerphoneOn(isOn);
1
user9673947

folgen Sie dem Code-Snippet:

//for spearphone on
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setSpeakerphoneOn(true);

//for headphone on
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(false);

Übrigens, ich habe in Android 7.0 (Redmi 4x) getestet und es hat gut funktioniert.

0
Aolphn