秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  278 随笔 :: 0 文章 :: 308 评论 :: 20万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

1) setting the Project Options, Uses Permissions, Wake lock = True

2) Adding Android.JNI.PowerManager to the uses clause

3) call:

 AcquireWakeLock; // at start up.

 ReleaseWakeLock; // at shutdown.

 

 

//-----------------------------------------------------------

unit Android.JNI.PowerManager;

 

interface

 

function AcquireWakeLock : Boolean;

procedure ReleaseWakeLock;

 

implementation

 

uses

  System.SysUtils,

  Androidapi.Helpers,

  Androidapi.JNI,

  Androidapi.JNIBridge,

  Androidapi.JNI.GraphicsContentViewText,

  Androidapi.JNI.JavaTypes,

  FMX.Helpers.Android;

 

type

  JPowerManager = interface;

  JWakeLock = interface;

 

  JWakeLockClass = interface(JObjectClass)

  ['{918E171F-CDB8-4464-9507-F49272CE7636}']

  end;

 

  [JavaSignature('android/os/PowerManager$WakeLock')]

  JWakeLock = interface(JObject)

  ['{D17B1136-FA15-4AEB-85B1-2D490F0FD320}']

    {Methods}

    procedure acquire; cdecl;

    procedure release; cdecl;

    function isHeld: Boolean; cdecl;

  end;

  TJWakeLock = class(TJavaGenericImport<JWakeLockClass, JWakeLock>) end;

 

  JPowerManagerClass = interface(JObjectClass)

  ['{7D0696A2-ADEA-4158-AE1F-5E720DEDBCF9}']

    {Property methods}

    function _GetFULL_WAKE_LOCK: Integer; cdecl;

    function _GetSCREEN_BRIGHT_WAKE_LOCK: Integer; cdecl;

    function _GetSCREEN_DIM_WAKE_LOCK: Integer; cdecl;

    function _GetPARTIAL_WAKE_LOCK: Integer; cdecl;

    {Properties}

    //Keep screen on bright & keyboard on

    //Deprecated in API level 17 - Jelly Bean MR1

    property FULL_WAKE_LOCK: Integer read _GetFULL_WAKE_LOCK;

    //Keep screen on bright

    //Deprecated in API level 13 - Honeycomb MR2

    property SCREEN_BRIGHT_WAKE_LOCK: Integer read _GetSCREEN_BRIGHT_WAKE_LOCK;

    //Keep screen on dim

    //Deprecated in API level 17 - Jelly Bean MR1

    property SCREEN_DIM_WAKE_LOCK: Integer read _GetSCREEN_DIM_WAKE_LOCK;

    //Keep CPU running, screen & keyboard can go off

    property PARTIAL_WAKE_LOCK: Integer read _GetPARTIAL_WAKE_LOCK;

  end;

 

  [JavaSignature('android/os/PowerManager')]

  JPowerManager = interface(JObject)

  ['{DEAED658-4353-4D17-B0A3-8179E48BE87F}']

    {Methods}

    function newWakeLock(levelAndFlags: Integer; tag: JString): JWakeLock; cdecl;

  end;

  TJPowerManager = class(TJavaGenericImport<JPowerManagerClass, JPowerManager>) end;

 

function GetPowerManager: JPowerManager;

var

  PowerServiceNative: JObject;

begin

  PowerServiceNative := SharedActivityContext.getSystemService(

    TJContext.JavaClass.POWER_SERVICE);

  if not Assigned(PowerServiceNative) then

    raise Exception.Create('Could not locate Power Service');

  Result := TJPowerManager.Wrap(

    (PowerServiceNative as ILocalObject).GetObjectID);

  if not Assigned(Result) then

    raise Exception.Create('Could not access Power Manager');

end;

 

var

  WakeLock: JWakeLock = nil;

 

function AcquireWakeLock: Boolean;

var

  PowerManager: JPowerManager;

begin

  Result := Assigned(WakeLock);

  if not Result then

  begin

    PowerManager := GetPowerManager;

    WakeLock := PowerManager.newWakeLock(

      TJPowerManager.JavaClass.SCREEN_BRIGHT_WAKE_LOCK,

      StringToJString('Runing'));

    Result := Assigned(WakeLock);

  end;

  if Result then

  begin

    if not WakeLock.IsHeld then

    begin

      WakeLock.acquire;

      Result := WakeLock.isHeld

    end;

  end;

end;

 

procedure ReleaseWakeLock;

begin

  if Assigned(WakeLock) then

  begin

    WakeLock.release;

    WakeLock := nil

  end;

end;

 

end.

posted on   秋·风  阅读(2378)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示