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包只参与编译,不参与打包。这样操作后 就避免需要利用反射去调用!!! ?
|