Alex7wrt Опубликовано 22 мая, 2015 Поделиться Опубликовано 22 мая, 2015 (изменено) Всем здравствуйте. Интересует такой вопрос - можно ли средствами FMX определить текущее положение ползунка громкости (или уровень громкости)? Прежде всего интересует Android. Изменено 22 мая, 2015 пользователем Alex7wrt Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 22 мая, 2015 Модераторы Поделиться Опубликовано 22 мая, 2015 Android - Controlling Your App’s Volume and Playback оно? Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 22 мая, 2015 Автор Поделиться Опубликовано 22 мая, 2015 Не похоже. Меня интересует, есть ли в FMX функция, позволяющая определить текущий уровень громкости в приложении. Вопрос, как определить какая клавиша громкости нажата, не интересует. Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 23 мая, 2015 Модераторы Поделиться Опубликовано 23 мая, 2015 Ну да, там не написано конкретное решение, но там есть то, что вам дало бы старт... AudioManager - getStreamVolume Alex7wrt 1 Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 23 мая, 2015 Автор Поделиться Опубликовано 23 мая, 2015 (изменено) Спасибо! Просто в плане работы с AndroidAPi в FMX у меня огромные пробелы. Насколько я понимаю, нужно добавить в uses модуль Androidapi.JNI.Media? Но как вызвать функцию - не знаю, не знаю, нужно ли использовать Intent или нет. Есть ли какой-нибудь FAQ-ликбез по тому, как вызывать функции из Android в FMX? Изменено 23 мая, 2015 пользователем Alex7wrt Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 23 мая, 2015 Модераторы Поделиться Опубликовано 23 мая, 2015 Где-то был материал... У меня в блоге есть вот такие статьи: Как создавать обёртки для JAVA-кода Как подключить и использовать свой JAVA-класс Страничка с готовым кодом: JNI Code Snippet и ещё куча примеров использования Android API в самих статьях Кстати, это не вы случаем задали вопрос "Здравствуйте. А есть ли возможность определить текущее положение ползунка громкости?" в блоге? Примерный код: 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; Aleksandr, Alex7wrt и Равиль Зарипов (ZuBy) 3 Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 23 мая, 2015 Автор Поделиться Опубликовано 23 мая, 2015 (изменено) Да, это я сегодня спрашивал. Не заметил, что Вы одно и то же лицо, как не заметил и приведенный Вами фрагмент в блоге. )) Спасибо! Буду изучать! Изменено 23 мая, 2015 пользователем Alex7wrt Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 23 мая, 2015 Модераторы Поделиться Опубликовано 23 мая, 2015 Ок, данный код, я только добавил, как раз после вашего вопроса. Забыл сказать, я его не проверял , так что если будут проблемы, пишите... Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 23 мая, 2015 Автор Поделиться Опубликовано 23 мая, 2015 OK. Спасибо! Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 23 мая, 2015 Автор Поделиться Опубликовано 23 мая, 2015 (изменено) Отличный код! Большое спасибо. Добавил еще определение максимального уровня громкости 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; Изменено 23 мая, 2015 пользователем Alex7wrt Равиль Зарипов (ZuBy) и Andrey Efimov 2 Цитата Ссылка на комментарий
0 Makaroff Опубликовано 11 октября, 2016 Поделиться Опубликовано 11 октября, 2016 (изменено) Здравствуйте. Столкнулся с проблемой вылета приложения при работе 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; Изменено 11 октября, 2016 пользователем Makaroff Цитата Ссылка на комментарий
1 Модераторы Равиль Зарипов (ZuBy) Опубликовано 11 октября, 2016 Модераторы Поделиться Опубликовано 11 октября, 2016 попробуй так: uses Androidapi.JNI.GraphicsContentViewText, ... AudioObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); Makaroff, Rusland и Brovin Yaroslav 3 Цитата Ссылка на комментарий
0 Rusland Опубликовано 11 октября, 2016 Поделиться Опубликовано 11 октября, 2016 У меня тоже вываливается на этой строчке... и AudioObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); не помогло Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 11 октября, 2016 Модераторы Поделиться Опубликовано 11 октября, 2016 Только что, Rusland сказал: У меня тоже вываливается на этой строчке... и AudioObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); не помогло у меня все работает, андроид 6.0. ниже проверить нет Цитата Ссылка на комментарий
0 Rusland Опубликовано 11 октября, 2016 Поделиться Опубликовано 11 октября, 2016 Виноват, не правильно код скопировал. С кодом от Zuby ошибки нет, только MediaPlayer_Volume не меняет своего значения при изменении громкости... всегда мне выдает 0,533333361148834 Цитата Ссылка на комментарий
0 Rusland Опубликовано 11 октября, 2016 Поделиться Опубликовано 11 октября, 2016 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 Makaroff Опубликовано 11 октября, 2016 Поделиться Опубликовано 11 октября, 2016 6 часов назад, ZuBy сказал: попробуй так: uses Androidapi.JNI.GraphicsContentViewText, ... AudioObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); Да. Заработало. В предыдущих версиях тоже без проблем. Спасибо большое! Равиль Зарипов (ZuBy) 1 Цитата Ссылка на комментарий
Вопрос
Alex7wrt
Всем здравствуйте.
Изменено пользователем Alex7wrtИнтересует такой вопрос - можно ли средствами FMX определить текущее положение ползунка громкости (или уровень громкости)? Прежде всего интересует Android.
Ссылка на комментарий
16 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.