![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Notificaciones Android NO se borran
Hola a todos un saludo cordial para los sufridores de Android (Google, claro)
Desarrollo una App para recordar eventos (Alertas) en Delphi 12.1 He observado el siguiente contratiempo: si genero más de dos notificaciones para el mismo día con distintas horas, CUANDO SE HA DISPARADO LA PRIMERA ya no tiene efecto borrar las siguientes, SE DISPARAN, aunque las haya borrado el usuario desde la aplicación. Bueno, para ser justos diré que SÓLO BORRA UNA, (la ÚLTIMA), es decir: la que está más alejada en el tiempo. ¿Alguien conoce alguna solución para ésto? Un saludo cordial. Gracias anticipadas.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10) "...si no tengo caridad, nada soy..." (1 Cor 13,1-13) |
#2
|
|||
|
|||
Hola.
Actualizando información. Después de "infinitas" pruebas y más pruebas, he comprobado lo siguiente: 1) Borrando el caché de la aplicación NO SE RESUELVE el problama. 2) Apagando el teléfono y volviendo a encender SÍ SE RESUELVE. (Pero esto no es nada operativo) 3) Borrando los datos de la App SÍ SE RESUELVE (Pero en este caso se reinicia la App, vuelve a pedir permisos, y borra todos los ficheros relacionados con la App. Tampoco sería operativo) Pongo esto en conocimiento de alguien mucho más experto que yo y que tenga más conocimientos sobre el funcionamiento de Android, por si hay alguna forma de borrar los datos relativos a las notificaciones, sin tener que reiniciar la aplicación, ya que esto no sería nada operativo. Sigo buscando mientras espero alguna solución. Gracias por vuestro tiempo. 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) |
#3
|
|||
|
|||
Hola.
Actualizo información: Buscando, buscando... he encontrado esta página. Estoy intentando acceder al directorio de los archivos persistentes de la App, (donde sospecho que están grabadas las notificaciones pendientes). Aunque mucho me temo que no voy a ser capaz. Os comunicaré si lo logro. Agradecería un poquito de ayuda, si alguien sabe cómo listar los archios del directorio. 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) |
#4
|
|||
|
|||
Hola tendrás un ejemplo en código que me puedas compartir explicando el problema y lo que buscas que haga o no la app ?
Sobre eso me baso y ya te ayudo te parece? |
#5
|
|||
|
|||
Hola, Dani.
Millones de gracias por tu ofrecimiento. Acabo de llegar a casa y he visto tu respuesta. Intentaré explicar el problema lo más posible sin extenderme mucho.(Si es posible) El objeto de la App consiste en registrar unos eventos futuros (Reuniones, Citas Médicas, Visitas, Cumpleaños... etc), con el fin de que el celular te los recuerde con una notificación local. Cuando tenía la app muy avanzada, se me ocurrió que podría generar unos avisos previos, con la antelación seleccionada por el usuario, y también unas repeticiones de los avisos (a elección voluntaria). Cuando tenía ambas cosas implementadas, quise darle al usuario la opción de no escuchar todos los preavisos ni todas las repeticiones. Así que implementé una opción para truncar los avisos en cualquier momento. Si el usuario trunca los avisos, anulamos las notificaciones pendientes para que no se disparen. El código está correcto. Anulamos una a una, por su identificador, las alarmas que no se han disparado. ¡¡SORPRESA!! A pesar de estar anuladas, se siguen disparando a su hora correspondiente. Empiezo a repasar código, a imvestigar, a hacer montones de pruebas... y llego a la siguiente conclusión: CUANDO HAY VARIAS ALARMAS EN LA MISMA FECHA, SI SE DISPARA LA PRIMERA, YA NO ES POSIBLE ANULAR POR CÓDIGO EL RESTO, SE SIGUEN DISPARANDO, AUNQUE LAS HAYAS BORRADO. Curiosamente, cuando las borras todas, (por código), la MAS TARDÍA, la última que debía dispararse, es LA UNICA que se borra. Después de las observaciones publicadas en mis dos mensajes anteriores, he llegado a la conclusión de que Aandroid las tiene registradas en la carpeta de datos interna, donde guarda toda la información y los permisos de la aplicación y no las borra. SI BORRAS LAS NOTIFICACIONES ANTES DE QUE SE HAYA DISPARADO LA PRIMERA DEL DÍA, SE BORRAN TODAS CORRECTAMENTE. Mi última idea es acceder a ésa carpeta INTERNA desde la aplicación y ver si se pueden borrar alli. Código de generación de la notificación:
Código de anulación:
Quizás me extendí demasiado, espero que se entienda el problema. Si queda alguna duda, hámelo saber. En cualquier caso, MUCHAS GRACIAS POR TU INTERÉS. 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) |
#6
|
|||
|
|||
Lo reviso
![]() Última edición por dani36652 fecha: 18-12-2024 a las 00:53:02. Razón: Respuesta errónea |
#7
|
|||
|
|||
Hola qué tal? Ayer llegué a tu casa tarde y no me dió tiempo de analizarlo hasta hoy en la oficina...
Intenta esto, espero que te funcione:
|
#8
|
|||
|
|||
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: 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. |
#9
|
|||
|
|||
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. |
#10
|
|||
|
|||
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.
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) |
#11
|
|||
|
|||
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) |
#12
|
|||
|
|||
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. |
#13
|
|||
|
|||
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) |
#14
|
|||
|
|||
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! |
#15
|
|||
|
|||
Una vez realizadas las pruebas he podido dar con la solución.
Descripción de por qué las notificaciones no eran canceladas: Internamente, se devuelve una lista de notificaciones con la estrcutura "notificacion=ID" donde ID es un número entero. Pero una vez ejecutada la primera notificación y si había más notificaciones, al consultarlas se devolvía una cadena echa un caos con una estructura similar a: notif=1notif2=2notif3=3notif4=4 notif1=23 notif4=58 pero las funciones que obtienen el nombre y id de cada notificación esperaban algo como: notif1=1 notif2=2 ... Solución: Había que implementarse un algoritmo que añadiera los saltos de linea correspondientes a la cadena de texto para ser insertada en un TStringList y ser recorrida por las funciones pertinentes y obtener los datos de las notificaciones. Todo lo anterior se aplicó en forma de parche a la unidad System.Android.Notification y se los comparto en el siguiente enlace a Github: https://github.com/dani36652/Delphi-...ions/tree/main Nota de uso: Copiar "System.Android.Notification.pas" a la carpeta de su proyecto; posteriormente en el IDE en la parte derecha abajo de "Project group", hacer click derecho sobre el nombre del proyecto, clickear "add" y seleccionan la unidad antes mencionada y eso es todo. Las notificaciones se cancelan normal desde el TNotificationCenter y no necesitarán modificar su código Saludos cordiales! Este parche fue escrito en Delphi 12.2 Athens. No se recomienda usar en versiones anteriores. Para ello, sugiero copiarse la unidad, aplicar el algoritmo de ordenamiento e implementarlo donde sea pertinente guiándose del parche que anteriormente se describe. Última edición por dani36652 fecha: 19-12-2024 a las 20:06:14. |
#16
|
|||
|
|||
MILLONES DE GRACIAS, DANI.
Funciona perfecto. Te digo que no puedes ser más GRANDE porque entonces ya no cabrías dentro del UNIVERSO. Entendiste perfectamente el problema y lo resolviste como el GRAN MAESTRO que eres. Eternamente agradecido.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10) "...si no tengo caridad, nada soy..." (1 Cor 13,1-13) |
#17
|
|||
|
|||
¡Excelente! Que bueno que te haya servido.
|
![]() |
|
|
![]() |
||||
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 |
![]() |
|