Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-12-2024
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Hola Dani. Muchas gracias por la generosidad con que me regalas tu tiempo, tu esfuerzo y tus conocimientos.
No puedo probar tu código.
Creo que se te ha olvidado copiar la declaración de la función ExtractName();
Quizá así no sea necesaria esta función:
Código Delphi [-]
procedure TForm1.Borra_Notifi(Id, FH: String); //Tu procedimiento quedaría así:

  function DateTimeLocalToUnixMSecGMT(const ADateTime: TDateTime): Int64;
  begin
    Result := DateTimeToUnix(ADateTime) * MSecsPerSec - Round(TTimeZone.Local.UtcOffset.TotalMilliseconds);
  end;
var
  NotificationsList: TStringList;
  Notifications: JString;
  I: Integer;
  Found: Boolean;
  PreferenceEditor: JSharedPreferences_Editor;
  FPreference: JSharedPreferences;
begin
    if DateTimeLocalToUnixMSecGMT(Now) > DateTimeLocalToUnixMSecGMT(StrToDateTime(FH)) then
      Exit; // Si la notificación es anterior no hace nada
    // ShowMessage('Borramos...'+Id+'=='+FH); para controlar que se ha borrado

    NotificationC.RequestPermission;

    (*
      Elimina la notificación mediante el nombre a nivel nativo
    *)
    FPreference := TAndroidHelper.Context.getSharedPreferences(TJNotificationAlarm.JavaClass.NOTIFICATION_CENTER, TJContext.JavaClass.MODE_PRIVATE);
    NotificationsList := TStringList.Create;
    try
      Notifications := FPreference.getString(TJNotificationAlarm.JavaClass.SETTINGS_NOTIFICATION_IDS, nil);
      NotificationsList.Add(JStringToString(Notifications));
      I := 0;
      Found := False;
      while not Found and (I < NotificationsList.Count) do
        if NotificationsList[i] = Id then
          Found := True
        else
          Inc(I);

      if Found then
      begin
        PreferenceEditor := FPreference.edit;
        try
          NotificationsList.Delete(I);
          PreferenceEditor.putString(TJNotificationAlarm.JavaClass.SETTINGS_NOTIFICATION_IDS, StringToJString(NotificationsList.Text));
        finally
          PreferenceEditor.commit;
        end;
      end;
    finally
      NotificationsList.Free;
    end;

    //Cancela la notificación mediante el TNotificationCenter
    NotificationC.CancelNotification(Id);
end;
Un cordial saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)

Última edición por jhonalone fecha: 18-12-2024 a las 18:50:51.
Responder Con Cita
  #2  
Antiguo 18-12-2024
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Hola, Dani.
Lamento comunicarte que la aplicación se sigue comportando igual con el cambio que has realizado en en la cancelación de las notificaciones a nivel nativo.

Sigo pensando que quedan registradas en la memoria interna del terminal, en algún sitio que no sabemos. No es en la caché pues se disparan despues de borrarla.

Gracias, de nuevo por tu esfuerzo.
Un saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)

Última edición por jhonalone fecha: 18-12-2024 a las 20:25:14.
Responder Con Cita
  #3  
Antiguo 18-12-2024
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Hola, Dani.
Perdona mi atrevimiento al querer corregir tu código.
Puesto que las Strings de NotificationsList llevan aparejado un número de orden después del signo igual(=)
he comprendido que sí es necesaria la función ExtractName.
Código Delphi [-]
function TForm1.ExtractName(const AStr: string): string; // Se crea esta nueva funcion
begin
  Result := AStr.Substring(0, AStr.IndexOf('='));
end;

El problema es que ahora no borra las notificaciones.
Seguiré investigando por qué.
Un saludo cordial.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #4  
Antiguo 18-12-2024
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Hola, Dani.
En un principio, (puesto que las alarmas se seguían disparando), pensé que el problema continuaba igual. Pero he seguido probando y es que el procedimiento no borra las alarmas.
Perdona el lío en que te he metido. por abusar de tu buena fe.
Un saludo muy cordial.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #5  
Antiguo 19-12-2024
dani36652 dani36652 is offline
Miembro
 
Registrado: abr 2019
Posts: 78
Poder: 8
dani36652 Va camino a la fama
Hola amigazo... justo la solución que te planteé ayer no me fue satisfactoria.
Estaba en la oficina... Así que no pude dedicarle tiempo a las pruebas.

Ese código era funcional hace años ya que es una solución basada en una respuesta de stack overflow. Voy a indagar más a fondo.
Responder Con Cita
  #6  
Antiguo 19-12-2024
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Muchas gracias, Dani.
¡Cómo me gustaria conocerte personalmente...!
Sospecho que no va a ser muy fácil resolver la cuestión.
Estoy buscando alguna manera de acceder a ésos archivos ocultos de Android, donde sospecho que los guarda el terminal, pero no lo véo nada fácil. Google sabe cómo proteger ésa información. Y no le culpo, al contrario, le alabo que aumente la seguridad de todos los usuarios. Estoy pensando que este problema es algo que se le ha escapado a Google.
Veremos si es posible resolverlo.
Un abrazo. Tienes un corazón muy altruista, de los que quedan ya muy poquitos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #7  
Antiguo 19-12-2024
dani36652 dani36652 is offline
Miembro
 
Registrado: abr 2019
Posts: 78
Poder: 8
dani36652 Va camino a la fama
Hola amigo.
Me he puesto a analizar el problema y las notificaciones no se guardan en ninguna carpeta perteneciente a la aplicación. Éstas son programadas a nivel nativo en algo llamado JNotification alarm y son asignadas mediante un ID internamente.
Hay unas funciones en System.Android.Notification que estoy parchando debido a que el problema se encuentra ahí y se resume a lo siguiente:

Internamente, las notificaciones son devueltas por el alarm manajer con el siguiente formato: 'Nombre=ID' pero, cuando hay más notificaciones se devuelve algo como esto 'not1=1not2=2' y las funciones internas para obtener los datos de las notificaciones como id y nombre se confunden por que viendo el codigo esperan algo como
not1=1
not=2
...

En un TStringList...
Ya que termine el parche y haga pruebas comparto el código y las conclusiones por aquí.
Saludos!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Notificaciones en Android Ricardo2010 Desarrollo en Delphi para Android 1 25-03-2021 08:21:02
poner un acceso directo en la barra de notificaciones de android? farute Desarrollo en Delphi para Android 2 16-01-2018 09:27:32
Notificaciones aplicacion android aposi Desarrollo en Delphi para Android 1 10-03-2016 17:58:53
Aplicación por debajo de la barra de notificaciones? Android 5.5'' wolfran_hack Desarrollo en Delphi para Android 6 08-03-2016 19:59:32
envio de Notificaciones "Push" a un dispositivo iOS/Android kaiserilich Desarrollo en Delphi para iOS/OSX 6 01-10-2015 10:15:58


La franja horaria es GMT +2. Ahora son las 21:31:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi