android - quitar - Borrar los datos de la aplicación mediante programación
quitar action bar android studio (6)
Combina el código de 2 respuestas:
- https://stackoverflow.com/a/42228794/1815624
- https://stackoverflow.com/a/29197259/1815624
Aquí está la respuesta basada en la fuente combinada resultante
private void clearAppData() {
try {
// clearing app data
if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT) {
((ActivityManager)getSystemService(ACTIVITY_SERVICE)).clearApplicationUserData(); // note: it has a return value!
} else {
String packageName = getApplicationContext().getPackageName();
Runtime runtime = Runtime.getRuntime();
runtime.exec("pm clear "+packageName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Quiero borrar los datos de mi aplicación mediante programación.
Los datos de la aplicación pueden contener cualquier cosa, como bases de datos, preferencias compartidas, archivos Internal-External o cualquier otro archivo creado dentro de la aplicación.
Sé que podemos borrar los datos en el dispositivo móvil a través de:
Configuración-> Aplicaciones-> Administrar aplicaciones-> Mi_aplicación-> Borrar datos
Pero tengo que hacer lo anterior a través de un programa de Android?
Hay una API nueva introducida en API 19 (KitKat): ActivityManager.clearApplicationUserData() .
Recomiendo usarlo en nuevas aplicaciones:
import android.os.Build.*;
if (VERSION_CODES.KITKAT <= VERSION.SDK_INT) {
((ActivityManager)context.getSystemService(ACTIVITY_SERVICE))
.clearApplicationUserData(); // note: it has a return value!
} else {
// use old hacky way, which can be removed
// once minSdkVersion goes above 19 in a few years.
}
Si no quieres la forma hacky, también puedes ocultar el botón en la interfaz de usuario, por lo que la funcionalidad simplemente no está disponible en teléfonos antiguos.
El conocimiento de este método es obligatorio para cualquier persona que use android:manageSpaceActivity
.
Cada vez que uso esto, lo hago desde una manageSpaceActivity
que tiene android:process=":manager"
. Allí, elimino manualmente cualquier otro proceso de mi aplicación. Esto me permite dejar que una IU siga funcionando y dejar que el usuario decida a dónde ir.
private static void killProcessesAround(Activity activity) throws NameNotFoundException {
ActivityManager am = (ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);
String myProcessPrefix = activity.getApplicationInfo().processName;
String myProcessName = activity.getPackageManager().getActivityInfo(activity.getComponentName(), 0).processName;
for (ActivityManager.RunningAppProcessInfo proc : am.getRunningAppProcesses()) {
if (proc.processName.startsWith(myProcessPrefix) && !proc.processName.equals(myProcessName)) {
android.os.Process.killProcess(proc.pid);
}
}
}
La forma más simple de hacer esto es
private void deleteAppData() {
try {
// clearing app data
String packageName = getApplicationContext().getPackageName();
Runtime runtime = Runtime.getRuntime();
runtime.exec("pm clear "+packageName);
} catch (Exception e) {
e.printStackTrace();
} }
Esto borrará los datos y eliminará tu aplicación de la memoria. Es equivalente a la opción de borrar datos en Configuración -> Administrador de aplicaciones -> Su aplicación -> Eliminar datos
Lo que uso en todas partes:
Runtime.getRuntime().exec("pm clear me.myapp");
La ejecución del fragmento de código anterior cierra la aplicación y elimina todas las bases de datos y preferencias compartidas
Si quieres un hack menos detallado:
void deleteDirectory(String path) {
Runtime.getRuntime().exec(String.format("rm -rf %s", path));
}
Solo estoy poniendo el tutorial del enlace ihrupin publicado aquí en esta publicación.
package com.hrupin.cleaner;
import java.io.File;
import android.app.Application;
import android.util.Log;
public class MyApplication extends Application {
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static MyApplication getInstance() {
return instance;
}
public void clearApplicationData() {
File cacheDirectory = getCacheDir();
File applicationDirectory = new File(cacheDirectory.getParent());
if (applicationDirectory.exists()) {
String[] fileNames = applicationDirectory.list();
for (String fileName : fileNames) {
if (!fileName.equals("lib")) {
deleteFile(new File(applicationDirectory, fileName));
}
}
}
}
public static boolean deleteFile(File file) {
boolean deletedAll = true;
if (file != null) {
if (file.isDirectory()) {
String[] children = file.list();
for (int i = 0; i < children.length; i++) {
deletedAll = deleteFile(new File(file, children[i])) && deletedAll;
}
} else {
deletedAll = file.delete();
}
}
return deletedAll;
}
}
Entonces, si quiere un botón para hacer esto, necesita llamar a MyApplication.getInstance (). clearApplicationData () desde un onClickListener
Actualización: la instancia de SharedPreferences
puede contener sus datos y volver a crear el archivo de preferencias después de eliminarlo. Entonces querrá obtener su objeto SharedPreferences
y
prefs.edit().clear().commit();
Actualizar:
Debes agregar android:name="your.package.MyApplication"
a la application tag
la application tag
dentro de AndroidManifest.xml si no lo has hecho. De lo contrario, MyApplication.getInstance()
devuelve null
, lo que da como resultado una NullPointerException .