quitar - programacion android pdf 2018
Borrar datos de usuario de aplicaciones de Android (8)
El comando pm clear com.android.browser
requiere permiso de root.
Entonces, ejecute su
primero.
Aquí está el código de ejemplo:
private static final String CHARSET_NAME = "UTF-8";
String cmd = "pm clear com.android.browser";
ProcessBuilder pb = new ProcessBuilder().redirectErrorStream(true).command("su");
Process p = pb.start();
// We must handle the result stream in another Thread first
StreamReader stdoutReader = new StreamReader(p.getInputStream(), CHARSET_NAME);
stdoutReader.start();
out = p.getOutputStream();
out.write((cmd + "/n").getBytes(CHARSET_NAME));
out.write(("exit" + "/n").getBytes(CHARSET_NAME));
out.flush();
p.waitFor();
String result = stdoutReader.getResult();
La clase StreamReader
:
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.concurrent.CountDownLatch;
class StreamReader extends Thread {
private InputStream is;
private StringBuffer mBuffer;
private String mCharset;
private CountDownLatch mCountDownLatch;
StreamReader(InputStream is, String charset) {
this.is = is;
mCharset = charset;
mBuffer = new StringBuffer("");
mCountDownLatch = new CountDownLatch(1);
}
String getResult() {
try {
mCountDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
return mBuffer.toString();
}
@Override
public void run() {
InputStreamReader isr = null;
try {
isr = new InputStreamReader(is, mCharset);
int c = -1;
while ((c = isr.read()) != -1) {
mBuffer.append((char) c);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (isr != null)
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
mCountDownLatch.countDown();
}
}
}
Usar adb shell para borrar los datos de la aplicación
adb shell pm clear com.android.browser
Pero al ejecutar ese comando desde la aplicación
String deleteCmd = "pm clear com.android.browser";
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec(deleteCmd);
} catch (IOException e) {
e.printStackTrace();
}
Problema:
No borra los datos del usuario ni ofrece ninguna excepción, aunque he otorgado el siguiente permiso.
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>
Pregunta:
¿Cómo borrar los datos de la aplicación usando adb shell ?
Este comando funcionó para mí:
adb shell pm clear packageName
Hola UdayaLakmal,
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 cache = getCacheDir();
File appDir = new File(cache.getParent());
if(appDir.exists()){
String[] children = appDir.list();
for(String s : children){
if(!s.equals("lib")){
deleteDir(new File(appDir, s));
Log.i("TAG", "File /data/data/APP_PACKAGE/" + s +" DELETED");
}
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
}
Por favor revisa esto y avísame ...
Puede descargar el código desde here
Los datos de la aplicación Afaik the Browser NO se pueden eliminar para otras aplicaciones, ya que se almacenan en private_mode
. Por lo tanto, la ejecución de este comando podría probablemente solo funcionar en dispositivos rooteados. De lo contrario, deberías probar otro enfoque.
Para borrar los datos de la aplicación, intente de esta manera.
public void clearApplicationData() {
File cache = getCacheDir();
File appDir = new File(cache.getParent());
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
if (!s.equals("lib")) {
deleteDir(new File(appDir, s));Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
}
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
Si desea hacerlo manualmente, también puede borrar sus datos de usuario haciendo clic en el botón “Clear Data”
en Settings–>Applications–>Manage Aplications–>
SU APLICACIÓN
or Is there any other way to do that?
A continuación, descargue el código aquí
adb uninstall com.package.packagename
ejecuta este comando en el shell ADB.
adb uninstall com.package.packagename -k
-k retendrá los datos del usuario
// To delete all the folders and files within folders recursively
File sdDir = new File(sdPath);
if(sdDir.exists())
deleteRecursive(sdDir);
// Delete any folder on a device if exists
void deleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory())
for (File child : fileOrDirectory.listFiles())
deleteRecursive(child);
fileOrDirectory.delete();
}