Перейти к содержанию
  • Регистрация
  • 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 пользователей онлайн

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

×
×
  • Создать...