suena - notificaciones android
¿Cómo sé que mi aplicación Android se ha actualizado para restablecer una alarma? (4)
Noté que una alarma se deshabilita cuando la aplicación que configura esta alarma se ha actualizado. Es eso cierto ?
Hasta ahora, utilicé SharedPreferences
con una clave FIRST_RUN
para saber si es la primera ejecución de mi aplicación. Si no encuentro esta clave, FIRST_RUN
la alarma y establezco FIRST_RUN
en falso, de lo contrario no hago nada.
¡Pero también noté que estas preferencias permanecen intactas entre la actualización de la aplicación!
Entonces, después de una actualización, la clave FIRST_RUN
ya es falsa, así que no hago nada mientras mi alarma necesita estar habilitada.
¿Cómo manejar ese caso?
Gracias por adelantado
Solución por Daniel Lew:
Necesita un receptor con las siguientes líneas en manifiesto:
<receiver android:name=".OnUpgradeReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="your.app.package" />
</intent-filter>
</receiver>
android:path
se usa para evitar que OnUpgradeReceiver
sea activado por cualquier actualización de cualquier aplicación.
Nunca lo intenté yo mismo, pero ¿qué tal crear un BroadcastReceiver
que escuche el ACTION_PACKAGE_REPLACED
Intent?
He pensado en probar esto antes, pero no estoy seguro de si hay un problema con la gallina y el huevo o no (por ejemplo, ¿se envía el Intento antes de que la nueva aplicación actualizada pueda recibirlo?). Vale la pena intentarlo, sin embargo.
Para Android OS v12 y superior, debe registrar BroadcastReceiver con la acción developer.android.com/reference/android/content/…
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
Simplemente, escucha el android.intent.action.MY_PACKAGE_REPLACED
... Este INTENT
te notificará si se ha instalado una nueva versión de tu aplicación sobre una existente
Nota: Esta lata de intención está disponible a partir de API 12