PDA

Ver la Versión Completa : respuesta extraña con cuenta regresiva y apagado de la pantalla


danielmj
27-05-2015, 23:30:50
Hola buenas, he iniciado este hilo aunque es sobre la misma aplicación sobre la que ya comentamos esta mañana. El caso es que estoy probándola en el curro y lo del patrón aleatorio va perfecto pero le he añadido un temporizador de 5 minutos en cuenta regresiva
cada vez que pulso sobre un botón la cuenta atrás se pone n marcha pero claro en el curro intervalo de los 5 minutos, apago la pantalla por eso de la batería y me he dado cuenta que la cuenta atrás se pausa y continúa cuando vuelvo a encender la pantalla. Obviamente eso no
me sirve ¿alguna idea?

Esto lo del scribo desde el móvil por lo que pido disculpas si el texto resulta confuso, aunque trató de corregirlo. Un saludo y gracias.

Veo que el mensaje no ocupa todo el ancho del campo, si algún administrador lo ve que lo borre y ya lo creare cuando llegue a casa

danielmj
28-05-2015, 11:25:12
Hola, investigando por la web encontre esta unidad que viene a solucionar este problema que me está pasando ahora...
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}']
{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;
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í (http://codeverge.com/embarcadero.delphi.firemonkey/android-stay-awake-or-r-edit/1060062) hay que hacer la llamada en el OnShow:
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:
[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.

danielmj
02-06-2015, 10:13:28
Por cierto, lo de que la cuenta atrás se pause cuando apago la pantalla es bastante raro teniendo en cuenta que en el formulario uso un segundo timer para mostrar la hora y este funciona sin problemas aunque la pantalla esté apagada, solo se pausa con la cuenta regresiva.

¿alguien sabe por que puede ser? saludos.