FAQ FM
Устройство
Операционная система

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

[Android, iOS] Как определить локаль, установленную на устройстве?

// Способ первый
// С помощью кроссплатформенного сервиса FM
uses
  {...,} FMX.Platform;

function GetLocale: string;
var
  LocaleService: IFMXLocaleService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocaleService)) then
    Result := LocaleService.GetCurrentLangID;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetLocale);
end;

// Способ второй
// С помощью iOS API
uses
  {...,} iOSapi.Foundation, Macapi.ObjectiveC;

function GetLocale: string;
var
  CurrentLocale: NSLocale;
  LanguageISO: NSString;
begin
  CurrentLocale := TNSLocale.Wrap(TNSLocale.OCClass.currentLocale);
  LanguageISO := TNSString.Wrap(CurrentLocale.objectForKey((NSLocaleLanguageCode as ILocalObject).GetObjectID));
  Result := UTF8ToString(LanguageISO.UTF8String);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetLocale);
end;

// Способ третий
// Для Android
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(SysLocale.DefaultLCID);
end;


[Android, iOS] Как скрыть/показать клавиатуру?

uses
  {...,} FMX.VirtualKeyboard, FMX.Platform;

procedure TForm1.ShowKeyboard(Obj: TFmxObject; const Show: Boolean);
var
  KeyboardService: IFMXVirtualKeyboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then
     case Show of
        True: KeyboardService.ShowVirtualKeyboard(Obj);
        False: if TVirtualKeyboardState.Visible in KeyboardService.VirtualKeyboardState then
                 KeyboardService.HideVirtualKeyboard;
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Show
  ShowKeyboard(nil {Edit1}, True);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   // Hide
   ShowKeyboard(nil, False);
end;


[Android] Как включать/отключать звук и вибрацию?

uses
  Androidapi.JNIBridge,
  Androidapi.Helpers,
  AndroidApi.JNI.Media,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.JavaTypes;

type
  TRingerMode = (rmSilent{=0}, rmVibrate{=1}, rmNormal{=2});

function GetRingerMode: TRingerMode;
var
  AudioObj: JObject;
  Audio: JAudioManager;
begin
  AudioObj := SharedActivity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE);
  Audio := TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);

  Result := TRingerMode(Audio.getRingerMode);
end;

procedure SetRingerMode(Mode: TRingerMode);
var
  AudioObj: JObject;
  AudioMng: JAudioManager;
begin
  AudioObj := SharedActivity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE);
  AudioMng := TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID);

  case Mode of
    rmSilent: AudioMng.setRingerMode(TJAudioManager.JavaClass.RINGER_MODE_SILENT);
    rmVibrate: AudioMng.setRingerMode(TJAudioManager.JavaClass.RINGER_MODE_VIBRATE);
    rmNormal: AudioMng.setRingerMode(TJAudioManager.JavaClass.RINGER_MODE_NORMAL);
  else
    AudioMng.setRingerMode(TJAudioManager.JavaClass.RINGER_MODE_NORMAL);
  end;
end;

// Переключение режимов
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetRingerMode(rmSilent);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SetRingerMode(rmVibrate);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  SetRingerMode(rmNormal);
end;

// Получение режима
procedure TForm1.Button4Click(Sender: TObject);
begin
  case GetRingerMode of
    rmSilent: ShowMessage('MODE SILENT');
    rmVibrate: ShowMessage('MODE VIBRATE');
    rmNormal: ShowMessage('MODE NORMAL');
  end;
end;


[Android] Как вызвать диалог настроек системы?

uses
  Androidapi.Helpers, Androidapi.JNI.Provider,
  Androidapi.JNI.GraphicsContentViewText;

procedure OpenGPSSettings;
{$IFDEF ANDROID}
var
  Intent: JIntent;
{$ENDIF}
begin
  {$IFDEF ANDROID}
  Intent := TJIntent.Create;
  // Аналогично можно вызвать диалог любых системных настроек,
  // нужно только выбрать соответствующее значение из TJSettings.JavaClass
  Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_SETTINGS);
  SharedActivity.startActivity(Intent);
  {$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenGPSSettings;
end;

При использовании материала - ссылка на сайт обязательна