내 애플리케이션의 데이터를 프로그래밍 방식으로 지우고 싶습니다.
애플리케이션의 데이터에는 데이터베이스, 공유 환경 설정, 내부-외부 파일 또는 애플리케이션 내에서 생성 된 기타 파일과 같은 것이 포함될 수 있습니다.
다음을 통해 모바일 장치의 데이터를 지울 수 있다는 것을 알고 있습니다.
설정-> 응용 프로그램-> 응용 프로그램 관리-> 내 _ 응용 프로그램-> 데이터 지우기
하지만 Android 프로그램을 통해 위의 작업을 수행해야합니까?
답변
API 19 (KitKat)에 도입 된 새로운 API :
ActivityManager.clearApplicationUserData ()가 있습니다.
새로운 응용 프로그램에서 사용하는 것이 좋습니다.
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.
}
해키 방식을 원하지 않는 경우 UI에서 버튼을 숨길 수도 있으므로 이전 휴대폰에서는 해당 기능을 사용할 수 없습니다.
이 방법에 대한 지식은 android:manageSpaceActivity
.
나는이를 사용할 때마다, 나는에서 그렇게 manageSpaceActivity
이있는 android:process=":manager"
. 거기에서 내 앱의 다른 프로세스를 수동으로 종료 합니다. 이를 통해 UI를 계속 실행하고 사용자가 다음에 이동할 위치를 결정할 수 있습니다.
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);
}
}
}
답변
이 게시물 에 여기에 게시 된 링크 ihrupin 에서 튜토리얼을 넣을뿐입니다 .
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;
}
}
따라서 버튼이이를 수행하려면 MyApplication.getInstance ()를 호출해야합니다. onClickListener 내에서 clearApplicationData ()
업데이트 :
귀하의 SharedPreferences
인스턴스가 데이터 붙잡고 당신이 그것을 삭제 한 후 환경 설정 파일을 다시 수 있습니다. 그래서 당신은 당신의 SharedPreferences
물건 을 얻고 싶어 하고
prefs.edit().clear().commit();
최신 정보:
당신은 추가해야 android:name="your.package.MyApplication"
받는 사람 application tag
이 그렇게하지 않았다면 내부의 AndroidManifest.xml. 그렇지 않으면을 MyApplication.getInstance()
반환 null
하여 NullPointerException을 발생 시킵니다.
답변
두 가지 답변의 코드를 결합하십시오.
다음은 결합 된 소스 기반 답변입니다.
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();
}
}
답변
이를 수행하는 가장 간단한 방법은
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();
} }
이렇게하면 데이터가 지워지고 메모리에서 앱이 제거됩니다. 설정-> 응용 프로그램 관리자-> 앱-> 데이터 지우기의 데이터 지우기 옵션과 동일합니다.
답변
내가 어디서나 사용하는 것 :
Runtime.getRuntime().exec("pm clear me.myapp");
위의 코드를 실행하면 응용 프로그램이 닫히고 모든 데이터베이스와 공유 환경 설정이 제거됩니다.
답변
덜 장황한 해킹을 원한다면 :
void deleteDirectory(String path) {
Runtime.getRuntime().exec(String.format("rm -rf %s", path));
}