Android系统恢复出厂设置方法-涵盖5.1 6.0 7.0 7.1 8.0 9.0

最近在8.0系统上面调试公司自主开发的setting,发现无法恢复出厂,原来在7.1 7.0 6.0 5.1上面使用的广播已经没有效果,查阅8.0的原生Settings源码之后发现恢复出厂的代码在8.0上面已经偷偷摸摸地换成了用另外一个广播android.intent.action.FACTORY_RESET。原来如此。

特将恢复出厂的方法总结如下:

public static void startFactoryDefault(Context context) throws Exception {
		if (Build.VERSION.SDK_INT < 26) {
			context.sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
		} else {
			Intent intent = new Intent("android.intent.action.FACTORY_RESET");
			intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
			intent.setPackage("android");
			context.sendBroadcast(intent);
		}
	}

PS:
注意在清单文件里面加上系统权限:

android:sharedUserId="android.uid.system"

就酱紫,老夫还需要管它什么版本号啊?!
这里写图片描述

--------------------------分割线-2019.11.12更新----------------------
最近方案SDK更新到了9.0,实际测试验证无需改动代码,保持跟8.0一样的逻辑即可实现恢复出厂设置。查阅9.0的Settings源码后发现,9.0跟8.0恢复出厂设置是一样的逻辑,因此特意修改一下标题,so easy…

PS:
8.0 9.0恢复出厂部分逻辑源码如下:

MasterClearConfirm.java

//8.0
    private void doMasterClear() {
        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, mEraseSdCard);
        getActivity().sendBroadcast(intent);
        // Intent handling is asynchronous -- assume it will happen soon.
    }

//9.0
    private void doMasterClear() {
        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, mEraseSdCard);
        intent.putExtra(Intent.EXTRA_WIPE_ESIMS, mEraseEsims);
        getActivity().sendBroadcast(intent);
        // Intent handling is asynchronous -- assume it will happen soon.
    }

你可能感兴趣的:(android,app开发,android,rom开发)