Android - очистить данные приложения и перезагрузить устройство

Я программирую Android-приложение с помощью Cordova. Это приложение устанавливается только на выделенные устройства Android 5.1.1. Среди прочего у меня есть функция очистки всех данных приложений. Я реализовал эту функциональность в плагине Cordova:

// My Cordova Plugin java
if (action.equals("factory_reset")) {
  try {
    Log.i(TAG, "Factory Reset");
    ((ActivityManager)cordova.getActivity().getApplicationContext().getSystemService(ACTIVITY_SERVICE)).clearApplicationUserData();
    rebootDevice();
  } catch (Exception ex) {
    Log.w(TAG, "Error while doing a Factory Reset", ex);
  }
}

Я хочу перезагрузить устройство после завершения удаления всех данных приложения. Вот моя функция перезагрузки:

private void rebootDevice(){
  Context mContext = cordova.getActivity().getApplicationContext();
  PowerManager pManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
  pManager.reboot(null);
}

Сама функция перезагрузки работает. Однако у меня есть проблема, что она не достигает этой функции, когда я вызываю ((ActivityManager)cordova.getActivity().getApplicationContext().getSystemService(ACTIVITY_SERVICE)).clearApplicationUserData();, потому что приложение немедленно закрывается.

Как я могу это решить? Как я могу очистить данные приложения и перезагрузить устройство?


person Michael B    schedule 05.12.2016    source источник


Ответы (1)


Я выбрал это решение:

Мой код плагина:

public boolean execute(final String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
  if (action.equals("factory_reset")) {
    clearApplicationData();
    rebootDevice();
  }
}

Приватные функции, которые называются:

private void clearApplicationData() {
  File cache = cordova.getActivity().getApplicationContext().getCacheDir();
  File appDir = new File(cache.getParent());
  Log.d(TAG, "AppDir = " + appDir);
  if (appDir.exists()) {
    String[] children = appDir.list();
    for (String s : children) {
      if (!s.equals("lib")) {
        Log.d(TAG, "Delete " + s);
        deleteDir(new File(appDir, s));
      }
    }
  }
}

private void rebootDevice(){
  Context mContext = cordova.getActivity().getApplicationContext();
  PowerManager pManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
  pManager.reboot(null);
}
person Michael B    schedule 07.02.2017