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;

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