Перейти к содержанию
  • Регистрация
  • 0
Alex7wrt

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

Вопрос

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

Изменено пользователем Alex7wrt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0

Не похоже.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ну да, там не написано конкретное решение, но там есть то, что вам дало бы старт...

AudioManager - getStreamVolume

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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

Ок, данный код, я только добавил, как раз после вашего вопроса. Забыл сказать, я его не проверял :), так что если будут проблемы, пишите...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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

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

и

 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 пользователей онлайн

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

×
×
  • Создать...