Подтвердить что ты не робот

Как включить или выключить динамик в android 4.0

Я воспроизводю файл через медиаплеер и хочу включить/выключить динамик, играть через гарнитуру, Bluetooth и т.д. Я попробовал приведенный ниже код, который хорошо работает для Android 2.2, но я хочу что-то, что также может работать для 2.2 и 4.0. Можете ли вы помочь мне программно включить/выключить динамик и играть через наушники?

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);

PS: я дал это разрешение в манифесте:

android.permission.MODIFY_AUDIO_SETTINGS 
4b9b3361

Ответ 1

Что-то вроде этого может работать на некоторых устройствах (я тестировал только XPEA P):

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.

Комбинация FOR_MEDIA, FORCE_SPEAKER обычно используется только внутренне для направления FM-радиосигнала на громкоговоритель (поскольку для FM-радио требуется, чтобы проводная гарнитура/наушники были подключены, чтобы действовать как антенна). Устройства, которые не имеют функциональности FM-радио (или используют альтернативную реализацию), могут игнорировать эту комбинацию параметров, поэтому этот метод не будет работать на таком устройстве.

Ответ 2

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

Ответ 3

Вы можете приобрести либо задний динамик, либо фронтальный динамик в момент времени.

Если аксессуар не подключен,

Используйте audioManager.setMode(AudioManager.MODE_IN_CALL); и audioManager.setSpeakerphoneOn(false); для использования фронтальной колонки/динамика. Но это будет звучать в динамике не на динамике. Чтобы использовать задний динамик, используйте audioManager.setMode(AudioManager.MODE_NORMAL); и audioManager.setSpeakerphoneOn(true);

Если подключен аксессуар; Использовать audioManager.setMode(AudioManager.MODE_IN_CALL); и audioManager.setSpeakerphoneOn(false); для использования фронтального динамика/динамика. Но это будет звучать в динамике не на динамике. Чтобы использовать задний динамик, используйте audioManager.setMode(AudioManager.MODE_IN_CALL); и audioManager.setSpeakerphoneOn(true);

Примечание. Убедитесь, что audioManager.setWiredHeadsetOn(boolean on) и audioManager.setBluetoothScoOn(boolean on) установлены на false для маршрутизации аудио через наушники. И установите для параметра true значение .

Ответ 5

Если вы просто хотите открыть свой громкоговоритель, и просто напишите эту строку в oncreate() своей деятельности.

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

Ответ 6

Попробуй это.

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);

Ответ 7

попробуйте выполнить фрагмент кода:

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

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

Кстати, я тестировал в Android 7.0 (Redmi 4x), и он работал нормально.

Ответ 8

Попробуйте

AudioManager.speakerphone(true);

Посмотрите это.