Mi aplicación Android actual necesita llamar
ActivityManager.clearApplicationUserData()
para simular al usuario que borra el almacenamiento de la aplicación
Que funciona bien.
Un efecto secundario de las llamadas clearApplicationUserData()
es que la aplicación está (comprensiblemente) cerrada.
Lo que da una mala experiencia de usuario.
Tengo dificultades para reiniciar mi aplicación una vez que llamé clearApplicationUserData()
.
He intentado usar startActivity
, Alarm Manager
con Pending Intent
, Foreground
/ Background
service.
Nada funciona.
¿Es imposible reiniciar una aplicación de Android que ha llamado clearApplicationUserData()
?
android
android-intent
Héctor
fuente
fuente
clearApplicationUserData()
?" - Dudo que sea posible desde tu propia aplicación. Muestre un mensaje al usuario explicando que esto sucederá antes de llamar a ese método, y el usuario puede reiniciar la aplicación desde el iniciador.clearApplicationUserData
, entonces éste será el flujo deseado .. Puede descargar el código fuente para ello ..MainActivity
. Si esto es posible, ¡se recomienda encarecidamente! Si no, ¿tal vez algo así como programar una tarea conWorkManager
(que no esté (?) Afectada por datos claros de la aplicación) para iniciar su actividad?Respuestas:
( 1a respuesta : esta respuesta solo funciona en situaciones limitadas, no es una respuesta completa)
public boolean clearApplicationUserData ()
Descripción
Devolución :
true
si la aplicación solicitó con éxito que se borren los datos de la aplicación;false
de otra manera.Como se indicó en el sitio web de referencia, tenemos un retorno antes de que se cierre la solicitud. Por lo tanto, vamos a utilizar este retornado para reiniciar la aplicación.
cuando Actividad
onDestroy()
yonStop()
se llaman reiniciar aplicación.Ponemos la acción de reinicio en ambos
onDestroy()
yonStop()
para asegurarnos de que la aplicación se reinicie nuevamente.Y también, creo que es una buena idea forzar la detención de la actividad antes de que el sistema operativo la detenga.
es porque, se asegura de que
onDestroy()
yonStop()
será invocado.fuente
ActivityManager.clearApplicationUserData()
al proceso de la aplicación se mata a la fuerza. No se ejecuta ninguna otra línea de código.Mi sugerencia puede sonar trivial pero, ¿ha considerado no llamar
ActivityManager.clearApplicationUserData()
?Aquí lo que dice la documentación sobre este método:
Entonces, para imitar este comportamiento, solo necesita borrar los directorios de almacenamiento internos y externos. No se necesitan permisos para acceder a ninguno de esos.
fuente
( 2ª respuesta : necesito mucha más contribución)
Después de 8 horas investigando en el sistema operativo Android y el sitio web de desarrolladores de Android para encontrar una solución para reiniciar la actividad cuando
clearApplicationUserData
se invoca. Finalmente, podría encontrar una solución agradable / piratería .Esta solución se ve como zidane dribble :)
Vamos a introducir la solución. en un primer momento,
clearApplicationUserData
se borran todas las pistas de aplicación cuando se invoca como tareas, notificaciones, alarmas , etc, por lo tanto, explícita vocación de actividad es imposible .La forma implícita es la única forma posible de llamar a la actividad.
Después de un par de pruebas, descubrí que la aplicación
manifest
registradaintent-filters
no se eliminaría y pueden escuchar las transmisiones entrantes del sistema .Aproximadamente, el 98% de las transmisiones del sistema no serían recibidas por una aplicación autorizada y ese 2% restante podría no transmitirse muy pronto.
Entonces lo que hay que hacer ? hmmm? vamos hombre, debo encontrar una solución ...
bingo, debo activar algo para que el sistema lo transmita <= parece piratería :)
así que decido elegir WIFI_STATE_CHANGED porque
manifest.xml
MainActivity.java
manifestación
tenga en cuenta que es solo un producto mínimo viable que debe desarrollarse más para que funcione perfectamente.
fuente
Feliz codificación.
fuente
Al borrar los datos de la aplicación en el dispositivo a través de la API, se
clearApplicationUserData()
restablece la aplicación como si acabara de instalarse. Como ha encontrado, también se borran las alarmas y transmisiones registradas con su aplicación. La forma más eficiente de mantener su aplicación en primer plano sería borrar los datos usted mismo, como han señalado otros, en lugar de utilizar la API. Aquí hay un ejemplo: https://stackoverflow.com/a/9073473/949224Sin embargo , si está decidido a usar la API (lo que garantiza que se borren todos los datos) y la aplicación se detenga por la fuerza, tengo una sugerencia:
Cree una pequeña aplicación complementaria que se pueda iniciar justo antes de borrar los datos de su aplicación. La aplicación complementaria simplemente vuelve a iniciar su aplicación, posiblemente después de un breve tiempo de espera.
La aplicación complementaria en sí misma debe cerrarse después, e idealmente debería ocultarse de la Pila de actividades, etc.
He visto que esto funciona con Android 6.0, pero no hay garantías de que sea versátil y funcione en todos los ámbitos. Si lo desea, habría más cosas que hacer para que la aplicación complementaria no tenga interfaz de usuario y se oculte del iniciador del teléfono. También es probable que desee agrupar el APK como un archivo dentro de su propia aplicación e instalarlo en la primera ejecución, lo que necesitaría que el usuario habilite la instalación desde "Fuentes desconocidas" (no Play Store). Se puede hacer a través de intentos a la configuración correcta del sistema, si es necesario, pero los usuarios necesitarían una buena explicación de por qué esto es necesario.
Entonces, como decía, el enfoque más simple es borrar los datos y los permisos de la aplicación usted mismo.
fuente