клиентские размеры есть у TCommonCustomForm (в следствии и у наследников, TForm)
FWinService: IFMXWindowService;
...
function TCommonCustomForm.GetClientHeight: Integer;
begin
Result := round(FWinService.GetClientSize(Self).Y);
end;
function TCommonCustomForm.GetClientWidth: Integer;
begin
Result := round(FWinService.GetClientSize(Self).X);
end;
Нашел причину, в API 26 формирование уведомления строится по другому. https://startandroid.ru/ru/uroki/vse-uroki-spiskom/515-urok-190-notifications-kanaly.html
Перевел приложение на API 25 и все заработало как надо.
Подозреваю, что для работы пушей в API 26 нужно обновить саму делфу. (у меня сейчас берлин)
Тут нет кода, выполняемого в доп.потоке.
Метод Synchronize делает следующее: "приостановить выполнение себя (т.е. доп.потока), переключиться в основной поток, выполнить там действие и после этого вернуться в себя (в доп.поток)".
Ввиду того, что в коде доп.потока есть только synchronize - то единственное, что поток делает - ждёт, пока выполнится его действие в основном потоке.
То есть - является абсолютно бессмысленным.
у формы есть событие FormVirtualKeyboardShown, где можно в общем обработать событие показа\скрытия клавиатуры.
там и флаг есть KeyboardVisible.
а в частности, для конкретного поля показывать\скрывать вот так можно как вариант:
procedure Tform1.Memo1Tap(Sender: TObject; const Point: TPointF);
var
KeyboardService: IFMXVirtualKeyboardService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then // Запрашиваем сервис виртуальной клавиатуры
KeyboardService.HideVirtualKeyboard;
//KeyboardService.ShowVirtualKeyboard(Memo1); для показа
end;
Задался вопросом, нашел ответ, может кому пригодится.
uses
Androidapi.JNI.Media,
Androidapi.Helpers,
Androidapi.JNIBridge,
AndroidApi.Jni.JavaTypes,
Androidapi.JNI.GraphicsContentViewText;
....
procedure TFormMain.PlaySoundEffects(const ASoundID : Integer; AVolume : Single = 1.0);
var AudioObj: JObject;
Audio: JAudioManager;
begin
AudioObj:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE);
Audio:= TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);
Audio.loadSoundEffects;
Audio.playSoundEffect(ASoundID, AVolume);
end;
Константы звуковых эффектов тут https://developer.android.com/reference/android/view/SoundEffectConstants
Правда у меня только звук "чпок" на всех константах. Но мне он и был нужен )