• 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;

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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