Я проверил isVolumeFixed из библиотеки AudioManager, он возвращает false на обоих устройствах, однако мое приложение действует на радио, как если бы isVolumeFixed было правдой. Описание isVolumeFixed.
Что пробовали:
- функции:
Код: Выделить всё
AudioManager
Код: Выделить всё
private AudioManager am;
am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_MUSIC, 2, 0);
Код: Выделить всё
private AudioManager am;
am.setStreamVolume(AudioManager.STREAM_MUSIC, 2, 0);
- и MediaPlayer.setVolume() согласно этому руководству, однако я не ожидал, что это сработает, поскольку приложение должно управлять системным звуком, а не воспроизводить музыку само по себе. Не работает.
Код: Выделить всё
AudioTrack.setVolume() - Вызов ключевого намерения с помощью команд оболочки с помощью кода ниже:
Код: Выделить всё
public void sudo(String command) {
try{
Process su = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());
outputStream.writeBytes(command+"\n");
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
try {
su.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
outputStream.close();
}catch(IOException e){
e.printStackTrace();
}
}
Код: Выделить всё
sudo("input keyevent X");Код: Выделить всё
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
164 --> "KEYCODE_MUTE"
Код: Выделить всё
sudo("media volume --show --stream 3 --set 11");Код: Выделить всё
sudo("am broadcast -a com.microntek.irkeyDown --ei keyCode 281");- Приложения, предположительно позволяющие изменять громкость, в частности FCC Car Launcher согласно этому вопросу и тот: https://github.com/d51x/KaierUtils (также использует пакет android.tw.john.TWUtil, который, похоже, каким-то образом управляет громкостью). Оба приложения работают не так хорошо, как другие объемные приложения из Play Store.
- Я просмотрел журналы. Из того, что мне удалось отфильтровать, появились следующие сообщения:
Код: Выделить всё
15:25:40 AS.AudioService: setStreamVolume(stream=4, index=0, calling=com.syu.ms)
15:25:40 AS.AudioService: setStreamVolume(stream=3, index=25, calling=com.syu.ms)
15:25:40 AS.AudioService: setStreamVolume(stream=1, index=7, calling=com.syu.ms
и
Код: Выделить всё
15:25:40 soundMute: ================>>> volume value: 19Я заметил, что стандартный Android на телефоне имеет градацию от 1 до 25, а по радио - до 36.
Временное решение — использовать код клавиши отключения звука (164, вызываемый оболочкой) или определение текущей громкости с помощью AudioManager и уменьшать/увеличивать его с помощью цикла с использованием команд оболочки. Увы, оба варианта отображают ползунок: первый отключает громкость вместо того, чтобы приглушить ее, как предполагалось, а второй не мгновенный. Я ищу более элегантный способ. Любая помощь будет оценена по достоинству!
Подробнее здесь: https://stackoverflow.com/questions/787 ... pp-in-java