delphi安卓中屏幕唤醒,保持常亮的方法  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi安卓中屏幕唤醒,保持常亮的方法


测试版本为delphi

10.1 Berlin。

  • 1、要在Project--Options--Uses Permissions给wake lock权限,即设置Wake lock为true;

    Delphi安卓中保持屏幕常亮 Delphi专题 第1张

  • 2、主要程序代码如下:

  • function AcquireWakeLock: Boolean;

    procedure ReleaseWakeLock;

    implementation

    {$R *.fmx}

    {$R *.NmXhdpiPh.fmx ANDROID}

    {$R *.SmXhdpiPh.fmx ANDROID}

    {$R *.LgXhdpiPh.fmx 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)

      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)

      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('Delphi'));

        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;

    procedure TForm1.Button1Click(Sender: TObject);  //设置常亮

    begin

      AcquireWakeLock;

    end;

    procedure TForm1.Button2Click(Sender: TObject);  //取消常亮

    begin

      ReleaseWakeLock;

    end;


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.047961950302124 seconds