¿Cómo puedo saber qué versión de la aplicación está siendo reemplazada por Android?

Tengo una actualización que deseo ejecutar para mi aplicación en function de la versión anterior de la aplicación.

Por ejemplo, si el usuario tiene la versión 1-5 y se están actualizando a 6 o 7, quiero ejecutar la actualización. Además, no quiero ejecutar la actualización si están actualizando de 6 a 7.

Intenté lograr esto utilizando un receptor de difusión que acepta los bashs PACKAGE_REMOVE y PACKAGE_REPLACE, pero parece que no me dan la información sobre la aplicación que se está eliminando. No obtengo el bash PACKAGE_REMOVED a less que vuelva a instalar la misma versión. Es difícil de decir porque el depurador y la printing de logging no parecen captar antes de que se reciban los bashs. ¿Algunas ideas?

@Override public void onReceive(Context context, Intent intent) { if (isOccurUpdated) { return; } if (action.equalsIgnoreCase("android.intent.action.PACKAGE_REPLACED")) { String name = info.versionName; // We are assuming that we didn't get down here if we have already // done this update Log.d(TAG,"We receive the REPLACE intent "+name); if (name.contains(OCCUR_ID_UPDATE) || name.contains(OCCUR_ID_UPDATE_FIX)) { dbh.occurIdUpdate(); } } else if (action.equalsIgnoreCase("android.intent.action.PACKAGE_REMOVED")) { String name = info.versionName; if (name.contains(OCCUR_ID_UPDATE)) { isOccurUpdated = true; } } } 

Necesita almacenar la información de la versión anterior en alguna parte, como por ejemplo:

Paso # 1: crea una class de Application personalizada y defínala en tu manifiesto ( android:name attribute of <application> ).

Paso # 2: en onCreate() de su class de Application personalizada, lea en alguna estructura de datos persistente que contenga el número de versión de su aplicación la última vez que se onCreate() . Por ejemplo, podría tener un valor lastVersion en sus ShanetworkingPreferences .

Paso 3: si ve que la última versión es anterior a su versión actual, realice la lógica de actualización que desee.

Paso # 4: escriba su versión actual a esa estructura de datos persistente (por ej., ShanetworkingPreferences las ShanetworkingPreferences ).

Si esto está más ligado a la lógica de la database, SQLiteOpenHelper maneja todo esto por usted.