android intent - reales - Ejecuta el código solo una vez después de una nueva instalación, la Preferencia compartida no es una solución, mira la descripción a continuación
manual android studio avanzado (4)
Quiero ejecutar un código específico solo una vez en mi aplicación de Android. La solución de preferencias compartidas no es la solución, ya que cuando va al administrador de aplicaciones y realiza Clear Data, las preferencias compartidas se eliminan para que la aplicación lo trate como una nueva instalación. Incluso probé la clase de aplicación que también falló, funciona igual que las preferencias compartidas. Se agradecerá cualquier ayuda, excepto las preferencias compartidas y la clase de solicitud.
Gracias.
La respuesta depende de lo que significa "solo una vez".
Una vez por instalación de la aplicación
Establezca una SharedPreference
.
Si el usuario borra datos, o desinstala y luego reinstala, el código se ejecutará nuevamente.
Una vez por dispositivo
Guarde un archivo vacío (un archivo de marca) en una ubicación conocida en el almacenamiento externo .
Usted puede hacer eso:
- en el propio almacenamiento de la aplicación, que se borrará en la desinstalación, pero no cuando el usuario acceda a Clear Data .
- en el almacenamiento externo compartido .
Este segundo enfoque es prometedor: es resistente a Clear Data y reinstala.
Sin embargo, el uso de almacenamiento externo donde el almacenamiento es extraíble o no se puede montar es complicado, y no estoy seguro de cuál sería su alternativa si el almacenamiento no está disponible. (pista: fallar rápido).
Tampoco puede confiar en que sus usuarios eliminen (accidental o deliberadamente) los archivos cuidadosamente colocados.
Una vez por usuario
Creo que esto está fuera del alcance de esta pregunta. Pero debería comenzar mirando los documentos de AccountManager e ir desde allí.
Una vez por dispositivo, en serio esta vez
OK entonces:
- no queremos fallar rápido si no podemos leer el almacenamiento externo.
- no queremos hacer correas y llaves con lo anterior, porque los malos actores eliminan los archivos de banderas en el almacenamiento externo y Borrar datos .
- solo debemos hacer una vez por dispositivo, incluso si el dispositivo se restablece de fábrica y se elimina el almacenamiento externo.
Tendremos que verificarlo con una fuente externa que pueda almacenar el estado de este dispositivo; llamémosle un "servidor".
Necesitamos un identificador para identificarnos de manera única al servidor.
Por lo general, generaría un UUID y lo almacenaría en algún lugar. Pero no podemos confiar en ninguna de nuestras opciones de almacenamiento.
Entonces, necesitamos generar un identificador de nuestro entorno externo estático. El UDID ahora en desuso de iPhone fue exactamente esto, generado a partir de varios identificadores de hardware .
Copiar este enlace sería un gran comienzo, pero dependiendo de su autorización de seguridad, es posible que desee hacer la suya propia. Puede haber implicaciones de privacidad si todos en el mundo usaran su aplicación o el mismo algoritmo que su aplicación (esta es la razón por la cual Apple desaprobó el UDID, y por qué cada aplicación debería usar su propio UUID).
De cualquier manera, esta es una cantidad extremadamente grande de esfuerzo de ingeniería (incluido el servidor) para (en el mejor) caso extremo, así que lo evitaría.
Peor aún, vincula su aplicación a tener una conexión a Internet, lo que dependiendo de su contexto, puede ser algo malo.
Además, un dispositivo rooteado tendrá acceso para cambiar cualquiera o todos estos identificadores. Se pone un poco filosófico después de eso.
Una vez por aplicación de por vida
Hágalo manualmente. En serio, hágalo a mano, ya sea antes de su implementación o en algún momento posterior.
Si necesita elegir un dispositivo ganador, necesita un servidor y una forma de identificar el dispositivo, como se indicó anteriormente. Hágalo manualmente, luego seleccione y luego dígale al ganador. Pero eso también está fuera del alcance de esta pregunta de Android.
Puede usar la base de datos SQLite para esto. Cree una tabla con solo una fila, digamos update = 0, una vez que haya ejecutado la pieza de código, cambie el valor de la actualización a 1. y luego compruebe cada vez la condición si update == 1 luego no ejecute el código sino ejecute esto. Si desinstala la aplicación, la base de datos también se eliminará, lo que significa que volverá a llamar a una nueva instalación. Espero que esto ayude.
Eche un vistazo a esta biblioteca: https://github.com/jonfinerty/Once Ayuda a administrar cuántas veces puede ejecutar esto, y tiene métodos convenientes para ejecutar algo solo una vez por instalación, o una vez para actualizar la versión de la aplicación
Si no puede confiar en que los datos estén presentes en el teléfono (ya que el usuario puede eliminarlos), de alguna manera debe almacenar que realizó la inicialización en línea. Defina un servicio en línea y rastree en qué dispositivos y para qué usuarios se ha ejecutado la inicialización.
Puede identificar de forma única un dispositivo de esta manera: ¿Existe una ID de dispositivo Android única?
Por curiosidad, ¿cuál es el escenario?