2017-08-31 23 views
0

我想清楚了像如何清除整个应用程序的数据,而不强制关闭应用程序在Android中

Settings->Applications-> ManageApplications-> My_application->Clear Data. 

整个应用程序的数据我想这个代码,但它是强制关闭应用程序。

try { 
    // clearing app data 
    String packageName = getActivity().getPackageName(); 
    Runtime runtime = Runtime.getRuntime(); 
    runtime.exec("pm clear " + packageName); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

请帮我解决这个问题,谢谢。

+1

有什么你有数据?共享首选项?数据库?你可以分开擦拭两者。 – Vucko

+0

同时拥有数据库和首选项, – Dedeepthika

+0

希望此链接将帮助您:https://www.hrupin.com/2011/11/how-to-clear-user-data-in-your-android-application-programmatically –

回答

0
/**You can clear the data programmatically as well without affecting 
    Shared Preferences or data base data**/ 

public static void deleteCache(Context context) 
{ 
    try 
    { 
     File dir = context.getCacheDir(); 
     deleteDir(dir); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

private static boolean deleteDir(File dir) 
{ 
    if (dir != null && dir.isDirectory()) 
    { 
     String[] children = dir.list(); 
     for (String aChildren : children) 
     { 
      boolean success = deleteDir(new File(dir, aChildren)); 

      if (!success) 
      { 
       return false; 
      } 
     } 
     return dir.delete(); 
    } 
    else 
    return dir != null && dir.isFile() && dir.delete(); 
} 
+0

上面的代码只会清除缓存而不是整个应用数据 – Dedeepthika

0

试试这个方法来清除缓存和应用程序数据(尝试和棒棒糖完美工作): -

(1)添加下面ClearApplicationData类改变你的AcivityName在progressDialog和您的sharedPreference用编辑清除的名称: -

private class ClearApplicationData extends AsyncTask<Void, String, String> { 

    ProgressDialog mDialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mDialog = new ProgressDialog(MainActivity.this); //Change MainActivity as per your activity 
     mDialog.setMessage("Data is clearing..."); 
     mDialog.setCancelable(false); 
     mDialog.show(); 
    } 

    protected String doInBackground(Void... urls) { 
     SharedPreferences.Editor editor = mContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE).edit(); 
     editor.clear(); 
     editor.apply(); 
     File cacheDir = mContext.getCacheDir(); 
     File appDir = new File(cacheDir.getParent()); 
     deleteRecursive(appDir); 
     return ""; 
    } 

    protected void onPostExecute(String result) { 
     mDialog.dismiss(); 
     Toast.makeText(mContext, "Data is cleared.", Toast.LENGTH_SHORT).show(); 
     finish(); //Activity finish 
    } 
} 

(2)下面添加功能递归的方法来删除文件: -

public void deleteRecursive(File fileOrDirectory) { 

    if (fileOrDirectory.isDirectory()) { 
     for (File child : fileOrDirectory.listFiles()) { 
      deleteRecursive(child); 
     } 
    } 
    fileOrDirectory.delete(); 
} 

(3)打电话时要清除应用程序数据的类: -

new ClearApplicationData().execute();