Android: ¿Cómo restablecer FirstRun SharedPreferences cuando se actualiza mi aplicación?

Mi aplicación copia archivos de res / raw a la tarjeta sd en la primera ejecución. Quiero que actualice esos archivos en cada actualización posterior de la aplicación. ¿Cómo puedo hacer que restablezca la preferencia de firstrun a true en cada actualización de la aplicación?

Aquí está el código relevante:

/** * get if this is the first run * * @return returns true, if this is the first run */ public boolean getFirstRun() { return mPrefs.getBoolean("firstRun", true); } /** * store the first run */ public void setRunned() { SharedPreferences.Editor edit = mPrefs.edit(); edit.putBoolean("firstRun", false); edit.commit(); } SharedPreferences mPrefs; /** * setting up preferences storage */ public void firstRunPreferences() { Context mContext = this.getApplicationContext(); mPrefs = mContext.getSharedPreferences("myAppPrefs", 0); //0 = mode private. only this app can read these preferences } public void setStatus(String statustext) { SharedPreferences.Editor edit = mPrefs.edit(); edit.putString("status", statustext); edit.commit(); } } 

En mi aplicación, guardo en mis preferencias compartidas el código de versión de la aplicación. En cada inicio, compruebo para ver si el código de versión guardado es más bajo que mi código de versión actual. Si es así, muestro un diálogo "¿qué hay de nuevo"?

Dar a este código un remolino – lo uso en la actividad principal de mi onCreate:

  PackageInfo pInfo; try { pInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA); if ( prefs.getLong( "lastRunVersionCode", 0) < pInfo.versionCode ) { // TODO: Handle your first-run situation here Editor editor = prefs.edit(); editor.putLong("lastRunVersionCode", pInfo.versionCode); editor.commit(); } } catch (NameNotFoundException e) { // TODO Something pretty serious went wrong if you got here... e.printStackTrace(); } 

Prefs es un objeto SharedPreferences privado. Esto funciona si es realmente la primera ejecución, y para actualizaciones. Al final del código de primera ejecución, el editor.putLong actualiza sus preferencias compartidas con el código de versión actual de su aplicación para que la siguiente ejecución no active su código de primera ejecución.

Esto también se beneficia del hecho de que su código de versión debe aumentar para que la aplicación sea vista como una actualización por el mercado, por lo que no es necesario recordar cambiar un valor separado para detectar la primera ejecución.

Puede imitar lo que se hace en el lado de la base de datos, con números de versión. En lugar de tener sólo una variable firstRun , tener un par con firstRun y firstRun , y poner un campo de número de versión estática en su aplicación, que se incrementa en cada versión. De esta forma, podrás comprobar si la aplicación se ha actualizado y realizar la operación en cada actualización.

Estoy creando clase para esto; Descarga en https://gist.github.com/2509913

Ejemplo de uso:

 long versionInstalled = App.getVersionInstalled(this); long current_v = App.getVersion(this); if( versionInstalled != current_v ){ Log.w("TAG", "Veresion not valid"); } 

Ejecute esto en OnCreate de MainActivity

 public void onUpdateFirstRun () { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); PackageInfo pInfo; try { pInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA); Log.d("VersionCode", pInfo.versionCode + " "); if (prefs.getLong(LAST_RUN_VERSION_CODE_KEY, 0) < pInfo.versionCode) { if (!isInitializedInSP(KEY)) { editor.putString(KEY, ""); } //Finalize and Save editor.putLong(LAST_RUN_VERSION_CODE_KEY, pInfo.versionCode); editor.apply(); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } 

Utilice el método para comprobar si ya lo había inicializado en la versión anterior

 public static boolean isInitializedInSP (String key) { SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContex()); Object o = mPrefs.getAll().get(key); if (o != null) { return true; } else { return false; } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.