方法1
参照系统"设置"应用
1.在AndroidManifest.xml配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.settings"android:sharedUserId="android.uid.system"> // 配置这个才有权限发恢复出厂设置的广播
并加入权限
<uses-permission android:name="android.permission.MASTER_CLEAR" />
似乎需要系统应用才能加该权限,做法参照"Android中修改系统时间的几种方式"
Intent clearIntent = new Intent("android.intent.action.MASTER_CLEAR");
clearIntent.putExtra("isReformate", true);
getActivity().sendBroadcast(clearIntent);
方法2
设备管理器
1.清单文件配置
<receiver
android:name="com.xzc.b14.MyDeviceAdminReceiver"
android:description="@string/description"
android:label="@string/device_admin"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
2.MyDeviceAdminReceiver.java
空实现即可
public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
}
3. xml /device_admin_sample.xml
什么需要的权限
<?xml version="1.0" encoding="UTF-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
<expire-password />
<encrypted-storage />
<disable-camera />
</uses-policies>
</device-admin>
4.恢复出厂设置
DevicePolicyManager dm;
ComponentName cpn;
dm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
cpn = new ComponentName(this, MyDeviceAdminReceiver.class);
if (dm.isAdminActive(cpn)) {// 判断设备管理器是否已经激活
// 清除数据,恢复出厂设置
// 0、或WIPE_RESET_PROTECTION_DATA.,表示只清除内部空间,不清楚SD卡的数据
// DevicePolicyManager.WIPE_EXTERNAL_STORAGE,连SD卡的一起清除
dm.wipeData(0);
} else { // 弹出界面让用户激活,
/*
可能出现 Cannot start ADD_DEVICE_ADMIN as a new task
不能在一个新的栈里面开启界面去激活
如:不能在服务里面调用激活api
*/
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, cpn);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "");
startActivity(intent);
}