He intentado realizar un restablecimiento de fábrica en Android utilizando la clase RecoverySystem, pero obtengo errores de permiso, que no puedo sobrescribir porque son permisos del sistema. Quiero saber si hay otra forma de realizar un restablecimiento de fábrica?Android Factory Reset Programmatically
Respuesta
Te sugiero que envíes al usuario a la actividad de configuración adecuada y les permitas que lo hagan ellos mismos.
Véase la actividad this tutorial y utilizan los ajustes android.provider.Settings.ACTION_PRIVACY_SETTINGS
usted tiene que utilizar DeviceAdministration (API 2.2 o superior)
DevicePolicyManager MDPM; mDPM.wipeData (0);
Ver: http://developer.android.com/guide/topics/admin/device-admin.html
Esto funciona en una gran variedad de dispositivos que he probado. (más de 20)
Context foreignContext = createPackageContext("com.android.settings", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
Class<?> yourClass = foreignContext.getClassLoader().loadClass("com.android.settings.MasterClear");
Intent intent = new Intent(foreignContext, yourClass);
startActivity(intent);
Esto ya no debería funcionar alrededor de Android 3.0. Use las API de administración del dispositivo para solicitar un borrado del dispositivo. – CommonsWare
Las aplicaciones de terceros más DEFINITELY pueden hacerlo.
En 2.2+ dispositivos (incluidos los últimos 4.x) tendría que usar DevicePolicyManager e incluir permisos en el archivo AndroidManifest.xml. Para dispositivos más antiguos, puede usar el cargador de contexto externo como se describe en otra respuesta.
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
DevicePolicyManager mDPM;
ComponentName mDeviceAdmin;
En Crear determinar existe versión para Android y conseguir manejar en objetos
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);
}
La clase WipeDataReceiver era una clase para implementar DeviceAdminReceiver, pero no tenía ningún anulaciones o cambios de código.
public static class WipeDataReceiver extends DeviceAdminReceiver {
}
Al reiniciar, inicialmente tendrá que confirmar la restauración de fábrica. cuando el resultado de la actividad devuelve, realizará wipeData. Si es Froyo o menos, puede saltar la actividad de reinicio de fábrica.
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) {
}
}
@TapanHP, Puede usar cualquier ID solo para manejar la devolución de llamada de resultado de la actividad.
int REQUEST_CODE_ENABLE_ADMIN = 1234;
- 1. Wipe data/factory reset a través del BAD
- 2. Android install apk programmatically
- 3. Android Button Position Programmatically
- 4. Programmatically Fling ListView Android
- 5. Factory/Abstract Factory confusion
- 6. Android: ¿Cómo resaltar EditText programmatically?
- 7. Android: ¿cómo definir ShapeDrawables programmatically?
- 8. Modifique endpoint ReaderQuotas programmatically
- 9. ¿Cómo establecer scrollbar thumb programmatically en Android?
- 10. cambiar ScrollView scrollBarStyle programmatically en Android
- 11. Android programmatically tile image como fondo
- 12. Botón de creación de Android programmatically issue
- 13. Cómo especificar android: listSelector = "@ null" programmatically?
- 14. Android: cómo seleccionar el elemento ListView programmatically
- 15. Factory Method
- 16. Obteniendo "SocketException: Connection reset by peer" en Android
- 17. Cambiar EditText IME_ACTION programmatically
- 18. Crear ListView programmatically
- 19. java.net.SocketException: Connection reset
- 20. JQuery datePicker date reset
- 21. jQuery desplazamiento infinito "reset"
- 22. Crear ListView programmatically
- 23. Rails 3.2, RSpec, Factory Girl: NameError: constante no inicializada Factory
- 24. Factory Girl y has_one
- 25. A Repository Factory Class
- 26. Unity Static Factory Extension
- 27. MEF y FACTORY ABSTRACT
- 28. C# Factory Pattern
- 29. Android establece la gravedad para un TextView programmatically
¿Manualmente? ¿Por qué una aplicación * alguna vez * necesita permiso para realizar un restablecimiento de fábrica? – kcoppock
Esto suena realmente dudoso. Si un usuario quiere un restablecimiento de fábrica, puede hacerlo por sí mismo. Esos permisos están ahí por una muy buena razón. – Jems
Sin mencionar, si su aplicación hizo esto, también desaparecería después de la restauración de fábrica de todos modos ... – kcoppock