Hola, investigando por la web encontre esta unidad que viene a solucionar este problema que me está pasando ahora...
Código Delphi
[-]unit Android.JNI.PowerManager;
interface
uses
System.SysUtils,
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}']
procedure acquire; cdecl;
procedure release; cdecl;
function isHeld: Boolean; cdecl;
end;
TJWakeLock = class(TJavaGenericImport) end;
JPowerManagerClass = interface(JObjectClass)
['{7D0696A2-ADEA-4158-AE1F-5E720DEDBCF9}']
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;
property FULL_WAKE_LOCK: Integer read _GetFULL_WAKE_LOCK;
property SCREEN_BRIGHT_WAKE_LOCK: Integer read _GetSCREEN_BRIGHT_WAKE_LOCK;
property SCREEN_DIM_WAKE_LOCK: Integer read _GetSCREEN_DIM_WAKE_LOCK;
property PARTIAL_WAKE_LOCK: Integer read _GetPARTIAL_WAKE_LOCK;
end;
[JavaSignature('android/os/PowerManager')]
JPowerManager = interface(JObject)
['{DEAED658-4353-4D17-B0A3-8179E48BE87F}']
function newWakeLock(levelAndFlags: Integer; tag: JString): JWakeLock; cdecl;
end;
TJPowerManager = class(TJavaGenericImport) end;
function GetPowerManager: JPowerManager;
function AcquireWakeLock(var AWakeLock: JWakeLock): Boolean;
procedure ReleaseWakeLock(var AWakeLock: JWakeLock);
implementation
uses
Androidapi.Helpers;
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;
function AcquireWakeLock(var AWakeLock: JWakeLock): Boolean;
var
PowerManager: JPowerManager;
begin
Result := Assigned(AWakeLock);
if not Result then
begin
PowerManager := GetPowerManager;
AWakeLock := PowerManager.newWakeLock(
TJPowerManager.JavaClass.SCREEN_BRIGHT_WAKE_LOCK,
StringToJString('Delphi'));
Result := Assigned(AWakeLock);
end;
if Result then
begin
if not AWakeLock.IsHeld then
begin
AWakeLock.acquire;
Result := AWakeLock.isHeld
end;
end;
end;
procedure ReleaseWakeLock(var AWakeLock: JWakeLock);
begin
if Assigned(AWakeLock) then
begin
AWakeLock.release;
AWakeLock := nil
end;
end;
end.
Según se dice
aquí hay que hacer la llamada en el OnShow:
Cita:
Place that in your project directory or add it to your search path. Then, in your form's OnShow event, simply call; {code} {$IFDEF ANDROID} Android.JNI.PowerManager.AcquireWakeLock; {$ENDIF} {code}
|
Pero cuando agrego la unidad de más arriba, la incluyo en la uses y hago la llamada me da este error:
Código:
[DCC Error] picasf.pas(180): E2035 Not enough actual parameters
[DCC Fatal Error] ControlPicas.dpr(6): F2063 Could not compile used unit 'picasf.pas'
¿Alguna idea? Un saludo.