procedure TForm1.FormShow(Sender: TObject);
var
PowerObj: JObject;
PowerManager: JPowerManager;
begin
PowerObj := TAndroidHelper.Context.getSystemService
(TJContext.JavaClass.POWER_SERVICE);
if Assigned(PowerObj) then
begin
PowerManager := TJPowerManager.Wrap((PowerObj as ILocalObject).GetObjectID);
if Assigned(PowerManager) then
begin
FWakeLock := PowerManager.newWakeLock
(TJPowerManager.JavaClass.SCREEN_DIM_WAKE_LOCK,
StringToJString('Need to screen always on'));
if Assigned(FWakeLock) then
begin
FWakeLock.acquire;
Log('Screen WAKE_LOCK is ON');
end;
end;
end;
end;
在窗体隐藏事件上,我们调用释放锁的代码:
procedure TForm1.FormHide(Sender: TObject);
begin
if Assigned(FWakeLock) then
begin
FWakeLock.release;
end;
end;
newWakeLock方法支持多个级别的 WAKE_LOCK :
PARTIAL_WAKE_LOCK - 确保处理器正在工作,屏幕和键盘背光可以关闭;
FULL_WAKE_LOCK - 确保屏幕和键盘背光的全亮度( API 级别 17 中已弃用的常量);
SCREEN_DIM_WAKE_LOCK - 屏幕打开,但可能是灰色的,键盘背光可能会关闭(在 API 级别 17 中常被弃用);
SCREEN_BRIGHT_WAKE_LOCK - 提供全屏亮度,键盘背光可以关闭( API 级别 13 中已弃用的常量);
为了我们的目的,我们使用 WAKE_LOCK
我们向清单添加权限:android.permission.WAKE_LOCK
在表单模块中,在接口部分,我们连接Androidapi.JNI.Os.pas模块:
我们声明一个类变量来保存屏幕锁:
在窗体显示事件中,我们调用代码来设置锁:
在窗体隐藏事件上,我们调用释放锁的代码:
newWakeLock方法支持多个级别的 WAKE_LOCK :
WAKE_LOCK级别也可以与标志组合:
添加到 dpr: