Иногда в приложениях необходимо запретить автоблокировку экрана. Существует как минимум три способа (на JAVA, с использованием Android API) управления затуханием/блокировкой дисплея. Пока мне удалось опробовать только 2 способа (остальные пока не знаю, как реализовать), но и их в принципе уже достаточно.
Способ 1 – Всё автоматически:
Данный способ хорош тем, что всё происходит автоматически. Вписали одну строчку кода и забыли…
1) Открываем проект в Delphi XE5, далее в меню «Project->View Source», в IDE откроется файл «Project1.dpr».
2) Теперь в «uses», после «FMX.Forms,» или до «Unit1 in 'Unit1.pas' {Form1};» добавляем «FMX.Helpers.Android, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText,»
3) Далее сразу после/до «Application.Initialize;» вставляем такую строчку:
«SharedActivity.getWindow.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);»
Как это выглядит:
Всё, теперь компилируем приложение и проверяем, экран не будет затухать, и блокироваться пока отображается наше приложение.
Теперь объяснение.
На Яве этот код выглядел бы примерно вот так:
protected void onCreate(Bundle icicle) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Как этот код переводится на Delphi JNI, разбираем по частям:
Исходная строка: getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow()
Эту строчку можно использовать только в файле «*.dpr» и только до создания формы «Application.CreateForm(TForm1, Form1);», иначе она не будет работать.
Способ 2 – Контролируем всё и вся :)
Данный способ хорош тем, что мы можем контролировать подсветку в run-time. Т.е. можем отключать/включать запрет на блокировку экрана по нажатию обычной кнопки.
К сожалению, в Delphi XE5 Update 2 пока нет «*.pas» файла для работы с «android.os.PowerManager», поэтому на просторах интернета найден такой файл, я не знаю, кто его написал, но спасибо этому человеку.
Всё что нужно сделать, это:
1) Подключаем в uses этот файл
2) Создаём кнопку «Разрешить блокировку» - ReleaseWakeLock
3) Создаём кнопку «Запретить блокировку» - AcquireWakeLock
4) В Uses Permissions выставляем Wake_Lock в True.
Файл Android.JNI.PowerManager.pas: Скачать с Google Drive
Оба способа проверены, работают!
Я буду обновлять эту заметку, т.к. существует ещё несколько способов, возможно, я разберусь с ними.
Если вам есть что сказать по теме, пишите в комменты.
Способ 1 – Всё автоматически:
Данный способ хорош тем, что всё происходит автоматически. Вписали одну строчку кода и забыли…
1) Открываем проект в Delphi XE5, далее в меню «Project->View Source», в IDE откроется файл «Project1.dpr».
2) Теперь в «uses», после «FMX.Forms,» или до «Unit1 in 'Unit1.pas' {Form1};» добавляем «FMX.Helpers.Android, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText,»
3) Далее сразу после/до «Application.Initialize;» вставляем такую строчку:
«SharedActivity.getWindow.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);»
Как это выглядит:
Всё, теперь компилируем приложение и проверяем, экран не будет затухать, и блокироваться пока отображается наше приложение.
Теперь объяснение.
На Яве этот код выглядел бы примерно вот так:
protected void onCreate(Bundle icicle) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Как этот код переводится на Delphi JNI, разбираем по частям:
Исходная строка: getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow()
- API: android.app.Activity.getWindow;
- Delphi: JActivity(SharedActivity).getWindow (файл Androidapi.JNI.App)
- API: android.view.Window.addFlags(int flags);
- Delphi: JWindow.addFlags(flags: Integer) (файл Androidapi.JNI.GraphicsContentViewText);
- API: android.view.WindowManager.LayoutParams
- Delphi: JWindowManager(TJWindowManager_LayoutParams) (файл Androidapi.JNI.GraphicsContentViewText)
Эту строчку можно использовать только в файле «*.dpr» и только до создания формы «Application.CreateForm(TForm1, Form1);», иначе она не будет работать.
Способ 2 – Контролируем всё и вся :)
Данный способ хорош тем, что мы можем контролировать подсветку в run-time. Т.е. можем отключать/включать запрет на блокировку экрана по нажатию обычной кнопки.
К сожалению, в Delphi XE5 Update 2 пока нет «*.pas» файла для работы с «android.os.PowerManager», поэтому на просторах интернета найден такой файл, я не знаю, кто его написал, но спасибо этому человеку.
Всё что нужно сделать, это:
1) Подключаем в uses этот файл
2) Создаём кнопку «Разрешить блокировку» - ReleaseWakeLock
3) Создаём кнопку «Запретить блокировку» - AcquireWakeLock
4) В Uses Permissions выставляем Wake_Lock в True.
Файл Android.JNI.PowerManager.pas: Скачать с Google Drive
Оба способа проверены, работают!
Я буду обновлять эту заметку, т.к. существует ещё несколько способов, возможно, я разберусь с ними.
Если вам есть что сказать по теме, пишите в комменты.