RSS订阅 | 匿名投稿
您的位置:网站首页 > FMX > 正文

DELPHI android 安卓中保持屏幕常亮

作者:admin 来源: 日期:2017/1/25 21:42:59 人气: 标签:

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

测试版本为delphi10.1 Berlin。

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



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


读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址: