Android: какой аудиорежим должен быть установлен для передачи голоса между устройствами

Я пытаюсь передать голос/аудио (двусторонний) между двумя Android-устройствами Tablet и Mobile (через java-сокеты).

Планшет может четко воспроизводить полученный звук (голос), но мобильный воспроизводит полученный звук как шум.
Затем я установил этот аудиорежим в коде на планшете:
audioManager.setMode(AudioManager.MODE_IN_CALL);

Теперь это приводит к тому, что мобильный телефон получает чистый голос. Но планшет молчит, полученный звук не воспроизводит (точнее его не слышно).

Я не уверен, какую комбинацию (если есть) режима AudioManager я должен использовать здесь?


person Jasper    schedule 11.10.2015    source источник
comment
мой ответ работает на вас?   -  person Sebastian Schneider    schedule 22.10.2015


Ответы (1)


Звук, который вы хотите воспроизвести, можно обрабатывать как Alarm.

Создайте новый класс с именем AlarmController и попробуйте этот код.

Это сработало для меня на Android 4.4.2 (Huawei Ascend P7) с каждой системной громкостью (Медиа, Рингтон, Будильник), установленной на 0.

Context context;
MediaPlayer mp;
AudioManager mAudioManager;
int userVolume;


public AlarmController(Context c) { // constructor for my alarm controller class
    this.context = c;
    mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

    //remeber what the user's volume was set to before we change it.
     userVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);

     mp = new MediaPlayer();
}

public void playSound(String soundURI){

    Uri alarmSound = null;
    Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);

    try{
        alarmSound = Uri.parse(soundURI);
    }catch(Exception e){
        alarmSound = ringtoneUri;
    }
    finally{
        if(alarmSound == null){
            alarmSound = ringtoneUri;
        }
    }



    try {

        if(!mp.isPlaying()){
        mp.setDataSource(context, alarmSound);
        mp.setAudioStreamType(AudioManager.STREAM_ALARM);
        mp.setLooping(true);
        mp.prepare();
        mp.start();
        }


    } catch (IOException e) {
        Toast.makeText(context, "Your alarm sound was unavailable.", Toast.LENGTH_LONG).show();

    }
    // set the volume to what we want it to be.  In this case it's max volume for the alarm stream.
   mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_PLAY_SOUND);

}

public void stopSound(){
// reset the volume to what it was before we changed it.
    mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, userVolume, AudioManager.FLAG_PLAY_SOUND);
    mp.stop();
   mp.reset();

}

public void releasePlayer(){
    mp.release();
}

Я надеюсь, что это работает для вас. :)

person Sebastian Schneider    schedule 21.10.2015
comment
Я не уверен, почему за этот ответ была присуждена награда - он не был выбран как принятый ответ - также этот ответ не имеет отношения к заданному вопросу. - person Jasper; 26.10.2015
comment
Это был единственный заданный вопрос, за который по истечении времени проголосовало 2+. - person Sebastian Schneider; 26.10.2015