studio quitar programacion notificaciones libros desarrollar barra bar aprende aplicaciones android

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 .