Лидеры
Популярный контент
Показан контент с высокой репутацией 20.09.2016 во всех областях
-
... или обычный TJMediaRecorder? Вот готовый пример записи микрофона в файл. Так не подойдет? А определение уровней звукозаписи для нормализации (normalization) — это обычно постпроцесс, выполняемый для всего файла записи.3 балла
-
Получить голос из микрофона потоками
azm_ezm_ivan и ещё один отреагировал Rusland за вопрос
Не, тут никто не знает... ) Ну может так еще попробуете: recorder := TJMediaRecorder.Create;2 балла -
брал отсюда Интересно что в стандартном Androidapi.JNI.App.pas вроде те же функции описаны, но с ним не получается работать.2 балла
-
При таких параметрах SDK Manager у меня в Берлине не виснет: SDK NDK JAVA2 балла
-
как из сервиса узнать, что приложение основное сейчас закрыто
Pax Beach и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
всего-то нужны было дописать procedure TForm9.Button2Click(Sender: TObject); // Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, // Androidapi.JNIBridge, Androidapi.JNI.App, Androidapi.Helpers, Androidapi.JNI.ActivityManager; var ActivityServiceManager: JObject; FActivityManager: JActivityManager; List: JList; Iterator: JIterator; ri: JActivityManager_RunningServiceInfo; begin ActivityServiceManager := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE); FActivityManager := TJActivityManager.Wrap((ActivityServiceManager as ILocalObject).GetObjectID); List := FActivityManager.getRunningServices(MAXINT); Iterator := List.Iterator; while Iterator.hasNext do begin ri := TJActivityManager_RunningServiceInfo.Wrap((Iterator.next as ILocalObject).GetObjectID); with ListView1.Items.Add do begin Text := JStringToString(ri.service.getPackageName); Detail := JStringToString(ri.service.getClassName); end; end; end; ri.service.getPackageName - показывает родителя сервиса (т.е. приложение)2 балла -
Получить голос из микрофона потоками
azm_ezm_ivan и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
а где инициализация? recorder:Jmediarecorder;2 балла -
Многоязыковое приложение
chaplin.u@gmail.com и ещё один отреагировал Камышев Александр за вопрос
чем плох стандартный TLang? свойство AutoSelect=True - автоматическое определение языка и StoreInForm=True - хранить в ресурсах использую TLang для статичных строк и вот такой код для статусов и сообщений: String LangString( unsigned int code, AnsiString lang ) { if ( lang == "RU" ) switch( code ) { case 0: return (AnsiString)"Ожидание"; case 60: return (AnsiString)" не выполнено"; case 61: return (AnsiString)" выполнено успешно"; } else if ( lang == "EN" ) switch( code ) { case 0: return "Waiting"; case 60: return " not completed"; case 61: return " completed successfully"; } return "";2 балла -
Фильтр по типу "облака тегов"
Pax Beach и ещё один отреагировал Brovin Yaroslav за вопрос
Добрый день, Можно взять компонент TFlowLayout с плавающей разметкой внутренних компонентов. Накидывать туда TLabel со специальным стилем и AutoSize. Там где нужен перенос вставлять TFlowLayoutBreak. Всплывающий список со списком, я думаю не проблема. Можно взять TPopup с TListBox. Можно просто заюзать пикеры FMX.Pickers.pas. Взять пикер TCustomListPicker2 балла -
Можно наверное воспользоваться TRoundRect, изменив Fill Color и Stroke Color на #FF4B90BE и положить на него пару TText... будет похоже. Самое трудное придумать как их объединять в ряды.2 балла
-
Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса. Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp". Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества. Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools). uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.1 балл
-
Как listbox можно добавить стиль для items которые не выделены
Pax Beach отреагировал Просто Проги за вопрос
Суть такова копаюсь в стилях, но не могу понять откуда идет наследования есть контейнер content в нем есть selection т,е выделенный элемент лист бокса , возможно ли создать стиль просто для итемов в листбоксе или это не делается через стиль?1 балл -
А в чем проблема? Создайте свое TPopupMenu и привяжите его к свойству PopupMenu у TEdit...1 балл
-
как из сервиса узнать, что приложение основное сейчас закрыто
Равиль Зарипов (ZuBy) отреагировал Pax Beach за вопрос
А где ты их взял? В SDK другие методы в этих классах: приложение и сервис. С этими все получилось =))) Спасибо!1 балл -
Получить голос из микрофона потоками
Rusland отреагировал Brovin Yaroslav за вопрос
А обычный TAudioCaptureDevice не подходит? И почему указан кодек MP4 для записи аудио?1 балл -
Получить голос из микрофона потоками
azm_ezm_ivan отреагировал Равиль Зарипов (ZuBy) за вопрос
видать я как-то неправильно выразился. скажу по другому. я не проверял на правильность этот код в делфи recorder := TJmediarecorder.JavaClass.init;1 балл -
как из сервиса узнать, что приложение основное сейчас закрыто
Равиль Зарипов (ZuBy) отреагировал Rusland за вопрос
ZuBy, огромное спасибо, выручил )1 балл -
Виноват Это вот апи скачанные с интернета: AndroidApi.zip В uses Androidapi.JNI.GraphicsContentViewText, // TJIntent (Receive Intent) Androidapi.JNI.JavaTypes, // JList Androidapi.JNIBridge, // ILocalObject Androidapi.JNI.App, // TJService Androidapi.Helpers, // StringToJString AndroidApi.Log, // LOGI Androidapi.JNI.RunningServiceInfo, // поиск запущенных приложений - https://stackoverflow.com/questions/34262554/how-to-check-if-a-service-is-running-in-delphi-10-seattle Androidapi.JNI.ActivityManager, // поиск запущенных приложений - http://blog.csdn.net/flcop/article/details/17190009uses b:boolean;1 балл
-
Аналог AllowAllUp для кнопки
Kitty отреагировал Brovin Yaroslav за вопрос
Добрый вечер, Есть. Укажите одинаковый GroupName у группы кнопок. Но брать кнопки нужно только TSpeedButton.1 балл -
Вы не знаете о существовании TMultiView ? Или я что-то не до понял1 балл
-
Получить голос из микрофона потоками
azm_ezm_ivan отреагировал Martifan за вопрос
я может не увидел но где код как у вас написана если так старайтесь чтобы он играл то не получится ну не правильно но крайне случай используйте ваш таймер но это неправильно лучше через TTask1 балл -
Как изменить версию АПИ для компиляции проекта
Rusland отреагировал Andrey Efimov за вопрос
1. Можно поставить и самую последнюю версию АПИ (на данный момент последняя версия АПИ 24 Android 7, но использовать рискованно, т.к. Студией официально заявлена поддержка только до версии АПИ 23) Google поддерживает обратную совместимость. 2. Частично, выбор зависит от версии АПИ, пример: в "Build Tools, Revision 23.0.0" появилась официальная поддержка Android 6.0 (API level 23). Т.е. если используете АПИ 23, то Build Tools должны быть версии 23.0.0 или более поздней. Опять же поддерживается обратная совместимость. Подобную информацию можно посмотреть тут SDK Build Tools Release Notes Те же правила относятся и к SDK Tools. По умолчанию студия ставит версию 24.3.3 (19 АПИ) 3. Версия только устанавливаемая вместе со студией! Буквально вчера удалось это на себе прочувствовать. По умолчанию ставится версия NDK r9c. Не обновляйте самостоятельно на последнюю версию, приложения перестанут запускаться на устройствах! 4. Для внутренней работы студии с НДК? не знаю точного ответа... 5. Изменить можно в файле AndroidManifest.template.xml 6. Всё это техническая информация, которая позволяет гуглу выдавать списки приложений под устройство пользователя. Т.е. если у пользователя АПИ 19 устройство, а ваше приложение работает с версиями не ниже 20 АПИ, то этому пользователю не будут показывать ваше приложение. Пример приложения написанного с такими настройками: SDK 23 АПИ NDK r9c в приложении я мониторю версию АПИ, чтобы не пытаться выдать новый функционал из 23 АПИ для версии (например) 19 АПИ. разработка проводилась на устройстве с АПИ 19 Тесты прошли на всех версиях АПИ выше 4.4 Приложение: Wifi Info (Установки: активные/всего - 119/337) Надеюсь хоть немного смог объяснить, хотя сам ещё не до конца понимаю, что хорошо для студии, что плохо... p.s. Всё описанное выше, справедливо для RAD Studio Berlin1 балл