1 .恢复出厂方式的接口
a.通过广播方式调用:
Intent intent = new Intent(Intent.ACTION_FACTORY_RESET);
intent.setPackage("android");
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
intent.putExtra(Intent.EXTRA_REASON, "MasterClearConfirm");
intent.putExtra(Intent.EXTRA_WIPE_EXTERNAL_STORAGE, true);
intent.putExtra(Intent.EXTRA_WIPE_ESIMS, true);
mContext.sendBroadcast(intent);
———————————————————————————————————————————
b.直接调用:
boolean shutdown; //操作完成后是否重启
String reason;//字符串 可以自定义
boolean force;//是否应忽略用户限制
boolean wipeEuicc;//是否擦除euicc数据
RecoverySystem .rebootWipeUserData(mCOntext, shutdown, reason, force, wipeEuicc);
———————————————————————————————————————————
2.清除用户数据接口
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); am.clearApplicationUserData("应用包名", new IPackageDataObserver() { @Override public IBinder asBinder() { return null; } @Override public void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException { Log.d("lmj",packageName+"=清除="+succeeded); } });
———————————————————————————————————————————
说明:当然这两种调用方式:都是直接调用隐藏方法?正常app直接调用是无法正常调用的,还需要有以下几步操作:
1. 清除权限:
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>
2. 系统应用:在清单文件下设置应用为系统应用
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">
3.这一步最为重要,必须要引入framework.jar ,并且设置jar包优先于系统api编译,并配置jar包只参与编译,不参与打包。这样操作后 就避免需要利用反射去调用!!!