由于版本的更新,之前所用的方法已经无法满足调用恢复出厂设置,通过源码追溯如下:

首先进入到这个界面


查看源码

/** Copyright (C) 2010 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package com.android.settings;import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.service.oemlock.OemLockManager;
import android.service.persistentdata.PersistentDataBlockManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.RestrictedLockUtils;import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;/*** Confirm and execute a reset of the device to a clean "just out of the box"* state.  Multiple confirmations are required: first, a general "are you sure* you want to do this?" prompt, followed by a keyguard pattern trace if the user* has defined one, followed by a final strongly-worded "THIS WILL ERASE EVERYTHING* ON THE PHONE" prompt.  If at any time the phone is allowed to go to sleep, is* locked, et cetera, then the confirmation sequence is abandoned.** This is the confirmation screen.*/
public class MasterClearConfirm extends OptionsMenuFragment {private View mContentView;private boolean mEraseSdCard;private boolean mEraseEsims;/*** The user has gone through the multiple confirmation, so now we go ahead* and invoke the Checkin Service to reset the device to its factory-default* state (rebooting in the process).*/private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {public void onClick(View v) {if (Utils.isMonkeyRunning()) {return;}final PersistentDataBlockManager pdbManager = (PersistentDataBlockManager)getActivity().getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);final OemLockManager oemLockManager = (OemLockManager)getActivity().getSystemService(Context.OEM_LOCK_SERVICE);if (pdbManager != null && !oemLockManager.isOemUnlockAllowed() &&Utils.isDeviceProvisioned(getActivity())) {// if OEM unlock is allowed, the persistent data block will be wiped during FR// process. If disabled, it will be wiped here, unless the device is still being// provisioned, in which case the persistent data block will be preserved.new AsyncTask<Void, Void, Void>() {int mOldOrientation;ProgressDialog mProgressDialog;@Overrideprotected Void doInBackground(Void... params) {pdbManager.wipe();return null;}@Overrideprotected void onPostExecute(Void aVoid) {mProgressDialog.hide();if (getActivity() != null) {getActivity().setRequestedOrientation(mOldOrientation);doMasterClear();}}@Overrideprotected void onPreExecute() {mProgressDialog = getProgressDialog();mProgressDialog.show();// need to prevent orientation changes as we're about to go into// a long IO request, so we won't be able to access inflate resources on flashmOldOrientation = getActivity().getRequestedOrientation();getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);}}.execute();} else {doMasterClear();}}private ProgressDialog getProgressDialog() {final ProgressDialog progressDialog = new ProgressDialog(getActivity());progressDialog.setIndeterminate(true);progressDialog.setCancelable(false);progressDialog.setTitle(getActivity().getString(R.string.master_clear_progress_title));progressDialog.setMessage(getActivity().getString(R.string.master_clear_progress_text));return progressDialog;}};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.}/*** Configure the UI for the final confirmation interaction*/private void establishFinalConfirmationState() {mContentView.findViewById(R.id.execute_master_clear).setOnClickListener(mFinalClickListener);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(), UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId());if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(),UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId())) {return inflater.inflate(R.layout.master_clear_disallowed_screen, null);} else if (admin != null) {View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);view.setVisibility(View.VISIBLE);return view;}mContentView = inflater.inflate(R.layout.master_clear_confirm, null);establishFinalConfirmationState();setAccessibilityTitle();return mContentView;}private void setAccessibilityTitle() {CharSequence currentTitle = getActivity().getTitle();TextView confirmationMessage =(TextView) mContentView.findViewById(R.id.master_clear_confirm);if (confirmationMessage != null) {String accessibileText = new StringBuilder(currentTitle).append(",").append(confirmationMessage.getText()).toString();getActivity().setTitle(Utils.createAccessibleSequence(currentTitle, accessibileText));}}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Bundle args = getArguments();mEraseSdCard = args != null&& args.getBoolean(MasterClear.ERASE_EXTERNAL_EXTRA);mEraseEsims = args != null&& args.getBoolean(MasterClear.ERASE_ESIMS_EXTRA);}@Overridepublic int getMetricsCategory() {return MetricsEvent.MASTER_CLEAR_CONFIRM;}
}

代码里面有一个doMasterClear()方法就是实现恢复出厂设置的所

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.}

由于方法里面的Intent 是调用的隐藏的属性 所以我用最笨的方法找到了源码里面的变量对呀的值 直接写进去方法如下:

 private void setMaster(){Bundle args = getArguments();boolean mEraseSdCard = args !=null && args.getBoolean("erase_sd");boolean mEraseEsims = args != null && args.getBoolean("erase_esim");Intent intent = new Intent("android.intent.action.FACTORY_RESET");intent.setPackage("android");intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);intent.putExtra("android.intent.extra.REASON", "MasterClearConfirm");intent.putExtra("android.intent.extra.WIPE_EXTERNAL_STORAGE", mEraseSdCard);intent.putExtra("com.android.internal.intent.extra.WIPE_ESIMS", mEraseEsims);getActivity().sendBroadcast(intent);}

这是我自己写的方法
你可以直接用按钮调用方法就可以实现功能

android 8.0 恢复出厂设置 最简单的方法相关推荐

  1. Android 8.0恢复出厂设置

    在8.0之前做过恢复出厂的demo,执行代码如下: Intent intent = new Intent(Intent.ACTION_MASTER_CLEAR); intent.addFlags(In ...

  2. 在 Android 手机上恢复出厂设置后恢复照片的 4 种简单方法(新方法)

    "嗨,谁能帮我恢复我的照片,因为我不小心恢复了出厂设置,而且我没有做备份?几个月来我一直试图通过使用恢复软件来恢复我的照片,root 了一个深扫描,但没用--" 恢复出厂设置可以清 ...

  3. Android8.0恢复出厂设置失败-BroadcastQueue: Background execution not allowed

    Android7.0恢复出厂设置调用下面的代码可正常恢复出厂 Intent intent = new Intent(Intent. ACTION_MASTER_CLEAR);intent.addFla ...

  4. Android应用层实现恢复出厂设置功能

    Android应用层实现恢复出厂设置功能 1.通过APP跳转到系统的恢复出厂设置界面,间接实现功能. Intent intent = new Intent(Settings.ACTION_PRIVAC ...

  5. Android 9 自动恢复出厂设置问题(auto-recovery)

    Android 9 自动恢复出厂设置问题(auto-recovery) 本章节针对引入了auto-recovery功能的版本,并且设备关机是以直接断电方式. 涉及知识点:开关机;e2fsck;reco ...

  6. android phone恢复出厂设置,Android手机正确恢复出厂设置方法

    Android手机正确恢复出厂设置方法 作为一款智能操作系统,Android也内置了许多其他智能操作系统共有的功能,比如每部手机都必备的恢复出厂设置.那么Android手机该如何设置,才能让它正确的恢 ...

  7. 华为交换机重制_华为交换机恢复出厂设置的三种方法

    原标题:华为交换机恢复出厂设置的三种方法 当交换机利旧使用时,一般会把交换机恢复出厂设置,并升级到最新版本. 准备工作 如果利旧的交换机是已经使用过的,可保存交换机恢复出厂设置前的配置,可用于交换机的 ...

  8. Android手机重置方法,安卓手机怎么正确恢复出厂设置的简单方法

    手机难免会出现一些比较难处理的一些现象,比如手机机身无法清理的软件残骸导致的手机卡机现象,不知所云的设置,找不到设置按钮了,严重影响使用感觉,这都是难免出现的一些问题这个时候可能就需要通过一些强硬的手 ...

  9. 恢复出厂设置android手机号码,安卓手机怎么正确恢复出厂设置的简单方法

    手机难免会出现一些比较难处理的一些现象,比如手机机身无法清理的软件残骸导致的手机卡机现象,不知所云的设置,找不到设置按钮了,严重影响使用感觉,这都是难免出现的一些问题这个时候可能就需要通过一些强硬的手 ...

最新文章

  1. IP地址,子网掩码、默认网关,DNS理论解释
  2. python需要php吗-做网站用php还是python
  3. 获取当前目录所有文件名 并且保存为1个00000.txt的文件文件bat
  4. 从Storm到Flink,有赞五年实时计算效率提升实践
  5. MySQL Hardware--FIO压测
  6. Lind.DDD.RedisClient~对StackExchange.Redis调用者的封装及多路复用技术
  7. c语言存储结构的实现,(C语言)栈的链式存储结构的实现
  8. CTF工具-gdb插件peda,pwndbg安装
  9. mysql数据库插入datetime_往MySQL数据库datetime类型字段中插入数据库的当前时间
  10. springcloud是如何进行服务治理的
  11. linux下oracle安装教程
  12. LINUX 远程复制
  13. 高精度地图数据的结构
  14. Android App 启动优化全记录
  15. xshell 批量创建.xsh会话文件
  16. 学无止境,京东活动自动领取脚本
  17. 用零知识证明连接多链宇宙
  18. RANSAC算法实现图像全景拼接
  19. 平面设计师怎么找素材?
  20. Prim算法实现最小生成树(Java)

热门文章

  1. uni-app刘海屏处理
  2. 代号诺曼底,诺基亚Lumia风格新机曝光
  3. stylus预处理入门(一)——选择器
  4. IDEA在terminal使用mvn命令
  5. 祖玛游戏源码:——天地会
  6. 链接oracle配置c3p0,C3P0配置连接数据库
  7. 科普| 什么是云原生?
  8. PAT乙级:1032 挖掘机技术哪家强
  9. 赛灵思 Xilinx UG1231 - UltraFast 设计方法快捷参考指南(中文版) (v2020.2)
  10. ESXI+黑裙-硬盘直通