-
Постов
326 -
Зарегистрирован
-
Посещение
-
Победитель дней
57
Активность репутации
-
OnePeople получил реакцию от Ingalime в Android: сканирование и подключение к WiFi
Вы можете его даже не создавать
TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI
-
OnePeople получил реакцию от Ingalime в [Android]Входящий звонок
if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) or (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS_TRANSIENT) -
OnePeople получил реакцию от Yarpda в Как добавить в приложение проверку наличия соединения с Интернетом?
ну да, это не мое решение так разделить, написал на скорую для Вас
function checkNetwork: Boolean; var ConnectivityServiceNative: JObject; cm: JConnectivityManager; activeNetwork: JNetworkInfo; begin try // подключаемся к сервису (в данном случае соединений) ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); // если не подключились то выход c результататом функции FALSE if not Assigned(ConnectivityServiceNative) then exit(false); // получаем менеджер соединений cm := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); // если не получили то выход c результататом функции FALSE if not Assigned(Result) then exit(false); // запрашиваем информацию о активном соединении activeNetwork := cm.getActiveNetworkInfo; // если есть информация и статус соединения подключено то результат функции TRUE Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; except // при любой ошибке выход c результататом функции FALSE Exit(false); end; end;
-
OnePeople получил реакцию от Tumaso в Опять не читает из assets в Android64
Где код, как вы получаете S?
Ну и скрин deployment для Android 64? Прошу заметить что Android чувствителен к регистру File и file это разные папки.
-
OnePeople получил реакцию от Ingalime в [Android]Входящий звонок
Тут вы делаете что хотите, хоть обращаетесь к визуальным компонентам хоть нет, главное чтобы вы остановили воспроизведение!
-
OnePeople получил реакцию от Ingalime в [Android]Входящий звонок
в OnCreate
{$IFDEF ANDROID}
if FAudioService=nil then
begin
FAudioService:= TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE);
if FAudioService <> nil then
begin
FAudioManager := TJAudioManager.Wrap((FAudioService as ILocalObject).GetObjectID);
end;
end;
{$ENDIF}
Общая переменная
var
FAudioManager: JAudioManager;
-
OnePeople получил реакцию от Ingalime в [Android]Входящий звонок
Androidapi.JNI.Os;
Мой лог вам не нужно
Каждый раз когда запускаете проигрывание файла
-
OnePeople получил реакцию от Barbanel в Crony Auto (Alpha)
Crony Auto - Лаунчер, целью которого является обеспечение удобства, целостности дизайна и обеспечение достаточного функционала для работы без использования стандартных приложений вашей Android магнитолы.
Основные возможности:
- Просмотр, запуск и удаление приложений
- Прослушивание аудио с памяти устройства или плейлистов радио онлайн
- Работа как в режиме воспроизведения с флешки, так и создание плейлистов
- Просмотр погоды
- Работа с OBD2 по Bluetooth
- Виджет яндекс-навигации с указанием пути движения
- Темы оформления
Текущая версия: 0.4.0.402
Ссылка на приложение: 4PDA
-
OnePeople получил реакцию от Дмитрий Ш. в Crony Auto (Alpha)
Crony Auto - Лаунчер, целью которого является обеспечение удобства, целостности дизайна и обеспечение достаточного функционала для работы без использования стандартных приложений вашей Android магнитолы.
Основные возможности:
- Просмотр, запуск и удаление приложений
- Прослушивание аудио с памяти устройства или плейлистов радио онлайн
- Работа как в режиме воспроизведения с флешки, так и создание плейлистов
- Просмотр погоды
- Работа с OBD2 по Bluetooth
- Виджет яндекс-навигации с указанием пути движения
- Темы оформления
Текущая версия: 0.4.0.402
Ссылка на приложение: 4PDA
-
OnePeople получил реакцию от Alialioglu2016 в StatusBar Color
А зачем это всё? В style.xml
<item name="android:windowTranslucentStatus">false</item>
В OnCreate
TAndroidHelper.Activity.getWindow.setFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_LAYOUT_NO_LIMITS, TJWindowManager_LayoutParams.JavaClass.FLAG_LAYOUT_NO_LIMITS); TAndroidHelper.Activity.getWindow.getDecorView.setFitsSystemWindows(false); TAndroidHelper.Activity.getWindow.setStatusBarColor($00000000);
-
OnePeople получил реакцию от Ingalime в Crony Auto (Alpha)
Crony Auto - Лаунчер, целью которого является обеспечение удобства, целостности дизайна и обеспечение достаточного функционала для работы без использования стандартных приложений вашей Android магнитолы.
Основные возможности:
- Просмотр, запуск и удаление приложений
- Прослушивание аудио с памяти устройства или плейлистов радио онлайн
- Работа как в режиме воспроизведения с флешки, так и создание плейлистов
- Просмотр погоды
- Работа с OBD2 по Bluetooth
- Виджет яндекс-навигации с указанием пути движения
- Темы оформления
Текущая версия: 0.4.0.402
Ссылка на приложение: 4PDA
-
OnePeople получил реакцию от Semitako в [Android]Входящий звонок
Ну смотрите, вообще любой нормальный плеер когда начинает играть запрашивает фокус себе, чтобы другие приложения приостановили проигрывание, когда происходит звонок приложение телефон также забирает аудио фокус себе, ваше задача отловить этот момент, при внедрении этого кода, ваше приложение будет останавливать проигрывание когда потеряет фокус. Во первых это единственно правильный метод. Во вторых ваше приложение будет останавливать проигрывание и при запуске видео в Ютуб, или входящем звонке с мессенджеров.
-
OnePeople получил реакцию от Ingalime в [Android]Входящий звонок
Ну смотрите, вообще любой нормальный плеер когда начинает играть запрашивает фокус себе, чтобы другие приложения приостановили проигрывание, когда происходит звонок приложение телефон также забирает аудио фокус себе, ваше задача отловить этот момент, при внедрении этого кода, ваше приложение будет останавливать проигрывание когда потеряет фокус. Во первых это единственно правильный метод. Во вторых ваше приложение будет останавливать проигрывание и при запуске видео в Ютуб, или входящем звонке с мессенджеров.
-
-
OnePeople получил реакцию от Semitako в [Android]Входящий звонок
Вам не нужно этого делать, вам нужно обрабатывать потерю аудиофокуса. Код корявый лень в порядок приводить...
type TMyAudioFocusChangeListener = class; // Создаем класс прослушивания фокуса аудио TForm1 = class(TForm) ... private { Private declarations } afChangeListener: TMyAudioFocusChangeListener; Создаем переменную прослушивания фокуса аудио ... public procedure GetAudioFocus; procedure onAudioFocusChange(focusChange: Integer); end; TAudioFocusChangeEvent = procedure(focusChange: Integer) of object; // описания события изменения фокуса TMyAudioFocusChangeListener = class(TJavaLocal, JAudioManager_OnAudioFocusChangeListener) // описание класса прослушивания фокуса аудио private [weak] FParent : TForm1; FOnAudioFocusChanged: TAudioFocusChangeEvent; public constructor Create(AParent : TForm1); property OnAudioFocusChanged: TAudioFocusChangeEvent read FOnAudioFocusChanged write FOnAudioFocusChanged; Destructor Destroy; Override; procedure onAudioFocusChange(focusChange: Integer); cdecl; end; var Form1: TForm1; AuFocus: JAudioManager_OnAudioFocusChangeListener; JAudioManagerListener: TMyAudioFocusChangeListener; implementation constructor TMyAudioFocusChangeListener.Create; // создание класса begin inherited Create; FParent := AParent; end; destructor TMyAudioFocusChangeListener.Destroy; // уничтожение класса begin inherited; end; procedure TMyAudioFocusChangeListener.onAudioFocusChange(focusChange: Integer); // событие изменения фокуса begin if Assigned(FOnAudioFocusChanged) then begin FOnAudioFocusChanged(focusChange); // передача события изменения фокуса end; FParent.onAudioFocusChange(focusChange); // вызов процедуры изменения фокуса формы end; procedure TForm1.onAudioFocusChange(focusChange: Integer); //процедура изменения фокуса формы begin if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then // фокус потерян begin // music stop // действия если фокус потерян end; end; procedure TForm1.GetAudioFocus; // получаем фокус для своего приложения begin CallinUIThread(procedure var AudioFocusRequest: JAudioFocusRequest; playbackAttributes: JAudioAttributes; afHandler: JHandler; res: integer; begin afChangeListener := TMyAudioFocusChangeListener.Create(Self); // создаем класс прослушивания аудио фокуса для своего приложения afHandler := TJHandler.Create; // создаем указатель своего приложения playbackAttributes := TJAudioAttributes_Builder.Create // создаем параметры прослушивания аудио фокуса .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA) .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC) .build(); AudioFocusRequest := TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create // создаем запрос с параметрами прослушивания аудио фокуса .setAudioAttributes(playbackAttributes) .setAcceptsDelayedFocusGain(true) .setOnAudioFocusChangeListener(afChangeListener, afHandler) .build(); res := FAudioManager.requestAudioFocus(AudioFocusRequest); // непосредственно запрашиваем фокус if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then // отказано else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then begin //фокус получен LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED'); end else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_FAILED then // отказано LogCAAdd('AUDIOFOCUS_REQUEST_FAILED'); end ); end;
-
OnePeople отреагировална slav_z в Canvas GPU Alpha+Opacity
для GPU (Android и iOS) неверно работает установка цвета при следующих условиях: Rectangle.Fill.Color:=$3CF865F7 и Rectangle.Opacity=0.5 (одновременно установить цвет элемента с альфа-каналом < $FF и прозрачностью элемента < 1).
Это может понадобиться, к примеру, для анимации "исчезающего" элемента. Ошибке много лет... исправляется внесением изменений в исходный код модуля FMX.Canvas.GPU.pas (необходимо скопировать модуль FMX.Canvas.GPU.pas к себе в проект и внести изменения ).
Оригинальный код:
Исправленный код:
-
OnePeople отреагировална krapotkin в Delphi 10.4.2 и ComboBox
эмм
вот вполне рабочий вариант
procedure TForm1.b1Click(Sender: TObject); var item: tlistboxitem; i: integer; begin for i := 1 to 2 do begin item := tlistboxitem.Create(nil); item.Text := inttostr(i); cbb1.ListBox.AddObject(item); end; end; procedure TForm1.b2Click(Sender: TObject); var item: tlistboxitem; i: integer; begin for i := 3 to 4 do begin item := tlistboxitem.Create(nil); item.Text := inttostr(i); cbb1.ListBox.AddObject(item); end; end;
-
OnePeople получил реакцию от Alexandr в [Android] Воспроизводить аудио
Audiofocus отлавливать, пример могу через пару часиков скинуть, а лучше сами в справке Гугла посмотрите
-
OnePeople получил реакцию от Alexandr в [Android] Воспроизводить аудио
По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора.
Выдернул из рабочего проекта, строго не пинать, за корявость)
1.
type {$IFDEF ANDROID} TMyAudioFocusChangeListener = class; {$ENDIF} TForm1 = class(TForm) 2.
private { Private declarations } {$IFDEF ANDROID} afChangeListener: TMyAudioFocusChangeListener; 3.
public procedure onAudioFocusChange(focusChange: Integer); end; TAudioFocusChangeEvent = procedure(focusChange: Integer) of object; TMyAudioFocusChangeListener = class(TJavaLocal, JAudioManager_OnAudioFocusChangeListener) private [weak] FParent : TForm1; FOnAudioFocusChanged: TAudioFocusChangeEvent; public constructor Create(AParent : TForm1); property OnAudioFocusChanged: TAudioFocusChangeEvent read FOnAudioFocusChanged write FOnAudioFocusChanged; Destructor Destroy; Override; procedure onAudioFocusChange(focusChange: Integer); cdecl; end; 4.
constructor TMyAudioFocusChangeListener.Create; begin inherited Create; FParent := AParent; end; destructor TMyAudioFocusChangeListener.Destroy; begin inherited; end; procedure TMyAudioFocusChangeListener.onAudioFocusChange(focusChange: Integer); begin if Assigned(FOnAudioFocusChanged) then begin FOnAudioFocusChanged(focusChange); end; FParent.onAudioFocusChange(focusChange); end; procedure TForm1.onAudioFocusChange(focusChange: Integer); begin Form1.Memo2.Lines.Add('focus change:'+focusChange.ToString); if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then begin MusicControl.AudioFocus:=false; case MusicControl.MusicType of TMusicType.Music: if MusicControl.Music.MusicState=TMusicState.Play then begin MusicPlayPause; exit; end; TMusicType.Radio: if MusicControl.Radio.MusicState=TMusicState.Play then begin RadioPlayPause; exit; end; end; end; end; 5.
procedure TForm1.GetAudioFocus; begin // {$IFDEF ANDROID} CallinUIThread(procedure var AudioFocusRequest: JAudioFocusRequest; playbackAttributes: JAudioAttributes; afHandler: JHandler; res: integer; begin afChangeListener:=TMyAudioFocusChangeListener.Create(Self); afHandler:= TJHandler.Create; playbackAttributes := TJAudioAttributes_Builder.Create .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA) .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC) .build(); AudioFocusRequest:=TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create .setAudioAttributes(playbackAttributes) .setAcceptsDelayedFocusGain(true) .setOnAudioFocusChangeListener(afChangeListener, afHandler) .build(); res:=FAudioManager.requestAudioFocus(AudioFocusRequest); if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED') else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then begin MusicControl.AudioFocus:=true; LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED'); end else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED'); end ); {$ENDIF} end; P.S. Для android 8 выше! для поддержки ранешних версий Android нужно немного дописать
-
OnePeople получил реакцию от Alexandr в [Android] Воспроизводить аудио
Ошибку чего??? Вы создаете процедуру, с именем каким вы хотите, как это может быть ошибкой, проверяйте синтаксис
-
OnePeople получил реакцию от Ingalime в [Android] Воспроизводить аудио
По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора.
Выдернул из рабочего проекта, строго не пинать, за корявость)
1.
type {$IFDEF ANDROID} TMyAudioFocusChangeListener = class; {$ENDIF} TForm1 = class(TForm) 2.
private { Private declarations } {$IFDEF ANDROID} afChangeListener: TMyAudioFocusChangeListener; 3.
public procedure onAudioFocusChange(focusChange: Integer); end; TAudioFocusChangeEvent = procedure(focusChange: Integer) of object; TMyAudioFocusChangeListener = class(TJavaLocal, JAudioManager_OnAudioFocusChangeListener) private [weak] FParent : TForm1; FOnAudioFocusChanged: TAudioFocusChangeEvent; public constructor Create(AParent : TForm1); property OnAudioFocusChanged: TAudioFocusChangeEvent read FOnAudioFocusChanged write FOnAudioFocusChanged; Destructor Destroy; Override; procedure onAudioFocusChange(focusChange: Integer); cdecl; end; 4.
constructor TMyAudioFocusChangeListener.Create; begin inherited Create; FParent := AParent; end; destructor TMyAudioFocusChangeListener.Destroy; begin inherited; end; procedure TMyAudioFocusChangeListener.onAudioFocusChange(focusChange: Integer); begin if Assigned(FOnAudioFocusChanged) then begin FOnAudioFocusChanged(focusChange); end; FParent.onAudioFocusChange(focusChange); end; procedure TForm1.onAudioFocusChange(focusChange: Integer); begin Form1.Memo2.Lines.Add('focus change:'+focusChange.ToString); if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then begin MusicControl.AudioFocus:=false; case MusicControl.MusicType of TMusicType.Music: if MusicControl.Music.MusicState=TMusicState.Play then begin MusicPlayPause; exit; end; TMusicType.Radio: if MusicControl.Radio.MusicState=TMusicState.Play then begin RadioPlayPause; exit; end; end; end; end; 5.
procedure TForm1.GetAudioFocus; begin // {$IFDEF ANDROID} CallinUIThread(procedure var AudioFocusRequest: JAudioFocusRequest; playbackAttributes: JAudioAttributes; afHandler: JHandler; res: integer; begin afChangeListener:=TMyAudioFocusChangeListener.Create(Self); afHandler:= TJHandler.Create; playbackAttributes := TJAudioAttributes_Builder.Create .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA) .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC) .build(); AudioFocusRequest:=TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create .setAudioAttributes(playbackAttributes) .setAcceptsDelayedFocusGain(true) .setOnAudioFocusChangeListener(afChangeListener, afHandler) .build(); res:=FAudioManager.requestAudioFocus(AudioFocusRequest); if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED') else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then begin MusicControl.AudioFocus:=true; LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED'); end else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED'); end ); {$ENDIF} end; P.S. Для android 8 выше! для поддержки ранешних версий Android нужно немного дописать
-
OnePeople получил реакцию от Ingalime в ListViewItem - Изменение цвета фона зависимости от данных в Dataset
Align и vertAlign ====== center ????
-
OnePeople получил реакцию от Ingalime в Права на запись
Если в манифесте есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
то все должно работать!
Context.getExternalFilesDir(String) и Context.getExternalCacheDir() в эти каталоги должно и без разршения записывать если API 19 или выше!
-
OnePeople получил реакцию от Ingalime в Скопировать файл из root директории
У всех, кто запросил разрешение на это;)
-
OnePeople получил реакцию от Ingalime в [Android] Воспроизводить аудио
Последний параметр ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
И этот флаг должен совпадать с манифестом