Перейти к содержанию
Fire Monkey от А до Я
  • 0

Определение положение ползунка громкости


Alex7wrt

Вопрос

Всем здравствуйте.
Интересует такой вопрос - можно ли средствами FMX определить текущее положение ползунка громкости (или уровень громкости)? Прежде всего интересует Android.

Изменено пользователем Alex7wrt
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Не похоже.

Меня интересует, есть ли в FMX функция, позволяющая определить текущий уровень громкости в приложении. 

Вопрос, как определить какая клавиша громкости нажата, не интересует.

Ссылка на комментарий
  • 0

Спасибо! Просто в плане работы с AndroidAPi в FMX у меня огромные пробелы. 

Насколько я понимаю, нужно добавить в uses модуль Androidapi.JNI.Media? Но как вызвать функцию - не знаю, не знаю, нужно ли использовать Intent или нет. Есть ли какой-нибудь FAQ-ликбез по тому, как вызывать функции из Android в FMX? 

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0
  • Модераторы

Где-то был материал...

У меня в блоге есть вот такие статьи: 

 

Кстати, это не вы случаем задали вопрос "Здравствуйте. А есть ли возможность определить текущее положение ползунка громкости?" в блоге?

 

Примерный код:

uses
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Media,
  Androidapi.Helpers,
  Androidapi.JNI.App,
  Androidapi.JNIBridge;


procedure TForm1.Button1Click(Sender: TObject);
var
  AudioObj: JObject;
  Audio: JAudioManager;
  CurrentVolume: Integer;
begin
  AudioObj = SharedActivity.getSystemService(TJActivity.JavaClass.AUDIO_SERVICE);
  Audio := TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);
  CurrentVolume = Audio.getStreamVolume(TJAudioManager.JavaClass.STREAM_MUSIC);
end;
Ссылка на комментарий
  • 0

Да, это я сегодня спрашивал. Не заметил, что Вы одно и то же лицо, как не заметил и приведенный Вами фрагмент в блоге. ))

Спасибо! Буду изучать! 

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0

Отличный код! Большое спасибо.
Добавил еще определение максимального уровня громкости getStreamMaxVolume из AndroidApi, так как в разных версиях андроида может отличаться количество градаций громкости.

 

Итого в событии формы обработки нажатий клавиш, определение уровня громкости для медиаплеера, которая лежит в диапазоне от 0 до 1, определяется так:

uses
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Media,
  Androidapi.Helpers,
  Androidapi.JNI.App,
  Androidapi.JNIBridge;

Var MediaPlayer_Volume: single;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
var AudioObj: JObject;
    Audio: JAudioManager;
begin
    if (key = vkVolumeDown) or (key = vkVolumeUp) then begin
        AudioObj:= SharedActivity.getSystemService(TJActivity.JavaClass.AUDIO_SERVICE);
        Audio:= TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);
        MediaPlayer_Volume:=Audio.getStreamVolume(TJAudioManager.JavaClass.STREAM_MUSIC)/Audio.getStreamMaxVolume(TJAudioManager.JavaClass.STREAM_MUSIC);
    end;
    
end;
Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0

Здравствуйте.

Столкнулся с проблемой вылета приложения при работе  AudioManager'а в Lollipop 5.0.1 (выше не проверял). При этом, в 4.2.2 и 4.4.2 всё отлично работает.

Код у меня аналогичный примеру выше. Есть у кого-нибудь идеи по решению такой проблемы?

procedure TForm1.Button3Click(Sender: TObject);
var
  AudioObj: JObject;
  AudioManager: JAudioManager;
begin

  AudioObj := TAndroidHelper.Activity.getSystemService(TJActivity.JavaClass.AUDIO_SERVICE);
  AudioManager := TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);
  AudioManager.setStreamVolume(TJAudioManager.JavaClass.STREAM_MUSIC, 15, 0);
end;

 

Изменено пользователем Makaroff
Ссылка на комментарий
  • 1
  • Модераторы

попробуй так:

uses
  Androidapi.JNI.GraphicsContentViewText,
...
  AudioObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE);

 

Ссылка на комментарий
  • 0
  • Модераторы
Только что, Rusland сказал:

У меня тоже вываливается на этой строчке...

и


 AudioObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE);

не помогло

у меня все работает, андроид 6.0. ниже проверить нет

Ссылка на комментарий
  • 0

Виноват, не правильно код скопировал. С кодом от Zuby ошибки нет, только MediaPlayer_Volume не меняет своего значения при изменении громкости... всегда мне выдает 0,533333361148834

Ссылка на комментарий
  • 0
2 часа назад, Makaroff сказал:

Здравствуйте.

Столкнулся с проблемой вылета приложения при работе  AudioManager'а в Lollipop 5.0.1 (выше не проверял). При этом, в 4.2.2 и 4.4.2 всё отлично работает.

Код у меня аналогичный примеру выше. Есть у кого-нибудь идеи по решению такой проблемы?


procedure TForm1.Button3Click(Sender: TObject);
var
  AudioObj: JObject;
  AudioManager: JAudioManager;
begin

  AudioObj := TAndroidHelper.Activity.getSystemService(TJActivity.JavaClass.AUDIO_SERVICE);
  AudioManager := TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);
  AudioManager.setStreamVolume(TJAudioManager.JavaClass.STREAM_MUSIC, 15, 0);
end;

 

Если нужно именно установить громкость, то вот нашел у себя пример из FMXPlatformRadio:

procedure TFMXPlatformRadio.SetVolume(const AValue:Single);
var
  AudioManager: JAudioManager;
begin
  AudioManager := TJAudioManager.Wrap(MainActivity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE));
  AudioManager.setStreamVolume(TJAudioManager.JavaClass.STREAM_MUSIC,
                               Round(AudioManager.getStreamMaxVolume(TJAudioManager.JavaClass.STREAM_MUSIC) * AValue), 0);
end;

 

Ссылка на комментарий
  • 0
6 часов назад, ZuBy сказал:

попробуй так:


uses
  Androidapi.JNI.GraphicsContentViewText,
...
  AudioObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE);

 

Да. Заработало. В предыдущих версиях тоже без проблем. Спасибо большое!

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...