Ответ 1
Сторонние приложения, наиболее подходящие для этого, могут сделать это.
На устройствах с поддержкой 2.2+ (включая последние 4.x) вам придется использовать DevicePolicyManager и включить разрешения в AndroidManifest.xml. Для более старых устройств вы можете использовать внешний загрузчик контекста, как описано в другом ответе.
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
DevicePolicyManager mDPM;
ComponentName mDeviceAdmin;
В окне Создать определить версию Android и получить управление объектами
currentAPIVersion = Build.VERSION.SDK_INT;
if (currentAPIVersion >= android.os.Build.VERSION_CODES.FROYO) {
//2.2+
mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdmin = new ComponentName(this, WipeDataReceiver.class);
}
Класс WipeDataReceiver был классом для реализации DeviceAdminReceiver, но не имел никаких переопределений или обновлений кода.
public static class WipeDataReceiver extends DeviceAdminReceiver {
}
В разделе "Возобновить" сначала необходимо подтвердить Factory Reset. когда результат Activity возвращает результат, он будет выполнять wipeData. Если это Froyo или меньше, вы можете перейти к акции Factory reset.
if (currentAPIVersion >= android.os.Build.VERSION_CODES.FROYO) {
// 2.2+
if (!mDPM.isAdminActive(mDeviceAdmin)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdmin);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Process will remove user installed applications, settings, wallpaper and sound settings. Are you sure you want to wipe device?");
startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
} else {
// device administrator, can do security operations
mDPM.wipeData(0);
}
} else {
// 2.1
try {
Context foreignContext = this.createPackageContext("com.android.settings", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
Class<?> yourClass = foreignContext.getClassLoader().loadClass("com.android.settings.MasterClear");
Intent i = new Intent(foreignContext, yourClass);
this.startActivityForResult(i, REQUEST_CODE_ENABLE_ADMIN);
} catch (ClassNotFoundException e) {
}
}