Перейти к содержанию
Fire Monkey от А до Я
  • 0

Разрешение/запрет гасить экран


krapotkin

Вопрос

Нашел способ запретить программе гасить экран, пока она работает

но способ одноразовый и выполняется только до старта Application

 

  Application.Initialize;
  {$IFDEF ANDROID}
  TAndroidHelper.Activity.getWindow.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);
  {$ENDIF}
  Application.CreateForm(TStartForm, StartForm);
  Application.Run;

можно ли сделать так, чтобы запрет работал только в одной форме программы, а все остальные работали бы штатно?

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

я использовал вот такой вариант в одной программе

function GetScreenOffTimeout: integer;
// Androidapi.JNI.Provider, FMX.Helpers.Android
begin
  Result := 0;
{$IFDEF ANDROID}
  Result := TJSettings_System.JavaClass.getInt(SharedActivityContext.getContentResolver,
    TJSettings_System.JavaClass.SCREEN_OFF_TIMEOUT, 15000); // 15 seconds is default is not found
{$ENDIF}
end;

function SetScreenOffTimeout(ATimeOut: integer): Boolean;
// Androidapi.JNI.Provider, FMX.Helpers.Android
begin
  Result := false;
{$IFDEF ANDROID}
  Result := TJSettings_System.JavaClass.putInt(SharedActivityContext.getContentResolver,
    TJSettings_System.JavaClass.SCREEN_OFF_TIMEOUT, ATimeOut);
{$ENDIF}
end;
Ссылка на комментарий
  • 0

я сделал второй вариант, получил необычный эффект

теперь у меня не засыпает, как обычно, в лок-скрин, но зато выводится какой-то типа приглушенный скрин сейвер с часами 

для продолжения работы надо ткнуть в экран

это так и должно быть?

Ссылка на комментарий
  • 0

@krapotkin у меня по второму варианту нет необычного эффекта, экран гасится.

Но во всех случаях мне пришлось добавить модуль Androidapi.Helpers. Без него не запустилось.

Ссылка на комментарий
  • 0

Вот вариант, его можно применять в любом месте (обычно в OnCreateForm), не обязательно в DPR. 

Флаг можно добавлять и удалять.     

Для обычного запрета выключать экран нужен только лишь флаг FLAG_KEEP_SCREEN_ON, остальные не нужны.
 

Для Tokyo и возможно поздних версий, CallInUIThread не нужен.

{$IFDEF ANDROID}
  procedure TurnOnAndKeepScreenAndroid(aEnable: boolean);
  var
    vFlags: integer;
  begin
    vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
        TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
        TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
        TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;

    if aEnable then
    begin
      CallInUIThread (   // uses FMX.Helpers.Android
      procedure
      begin
        TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
      end );
    end
    else
      CallInUIThread (
      procedure
      begin
        TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
      end );
  end;
  {$ENDIF}


 

Изменено пользователем ENRGY
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...