设置-安全-手机加密功能解说

        此功能能够用来加密手机上的全部数据,包含 Google 帐户、应用数据、音乐和其它媒体信息、已下载的信息等。假设运行了加密操作,您每次开机时都必须输入数字 PIN 或password。
请注意,上述 PIN 或password与您在未加密状态下解锁手机时所用的同样,无法单独设置。
警告:加密操作无法撤消。要将手机恢复为未加密状态,唯一的方法是恢复出厂设置,但这会清除您的全部数据。
假设您的手机遭窃,加密可提供额外保护,某些组织可能要求或建议使用加密。在启用加密前,请先咨询您的系统管理员。非常多情况下。您设置的加密 PIN 或password是由系统管理员控制的。
在启用加密前,请做好下面准备:
(1) 设置锁定屏幕 PIN 或password。
(2) 为电池充电。
(3) 为手机插上电源。
(4) 安排一个小时或更长时间进行加密过程。切勿中断此过程,否则会丢失部分或所有数据。
准备好启用加密后。请运行下面操作:
(1) 在主屏幕或“全部应用”屏幕中,触摸“设置”图标 。
(2) 依次触摸个人 > 安全 > 加密 > 加密手机
(3) 请细致阅读关于加密的信息。
    假设您没有为电池充电或为手机插上电源。则无法使用加密手机button。假设您改变主意,不希望加密手机了,请触摸“返回”button。
警告:中断加密过程会导致数据丢失。
(4) 触摸加密手机
(5) 输入锁定屏幕 PIN 或password,然后触摸继续
(6) 再次触摸加密手机
此时加密过程開始,屏幕上会显示其进度。

加密过程可能须要一个小时或更长时间。在此期间。您的手机可能会多次又一次启动。

加密完毕后,系统会提示您输入 PIN 或password。
以后,您每次开机时都须要输入 PIN 或password才干解密。
2、重置手机后。用户须要又一次输入首次设置手机时须要输入的同样信息。

假设用户一直是将数据备份到 Google 帐户的,则可通过设置过程中的某个选项恢复这些数据。

代码的解析:
一、加密的几种状态

http://osxr.org/android/source/frameworks/base/core/java/android/app/admin/DevicePolicyManager.java#1142

1117      * Result code for {@link #setStorageEncryption} and {@link #getStorageEncryptionStatus}:
1118      * indicating that encryption is not supported.
1119      */
1120     public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0;
1121 
1122     /**
1123      * Result code for {@link #setStorageEncryption} and {@link #getStorageEncryptionStatus}:
1124      * indicating that encryption is supported, but is not currently active.
1125      */
1126     public static final int ENCRYPTION_STATUS_INACTIVE = 1;
1127 
1128     /**
1129      * Result code for {@link #setStorageEncryption} and {@link #getStorageEncryptionStatus}:
1130      * indicating that encryption is not currently active, but is currently
1131      * being activated.  This is only reported by devices that support
1132      * encryption of data and only when the storage is currently
1133      * undergoing a process of becoming encrypted.  A device that must reboot and/or wipe data
1134      * to become encrypted will never return this value.
1135      */
1136     public static final int ENCRYPTION_STATUS_ACTIVATING = 2;
1137 
1138     /**
1139      * Result code for {@link #setStorageEncryption} and {@link #getStorageEncryptionStatus}:
1140      * indicating that encryption is active.
1141      */
1142     public static final int ENCRYPTION_STATUS_ACTIVE = 3;

二 、service的调用

http://osxr.org/android/source/frameworks/base/services/java/com/android/server/DevicePolicyManagerService.java#2029

2023     /**
2024      * Hook to low-levels:  Reporting the current status of encryption.
2025      * @return A value such as {@link DevicePolicyManager#ENCRYPTION_STATUS_UNSUPPORTED} or
2026      * {@link DevicePolicyManager#ENCRYPTION_STATUS_INACTIVE} or
2027      * {@link DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE}.
2028      */
2029     private int getEncryptionStatus() {
2030         String status = SystemProperties.get("ro.crypto.state", "unsupported");
2031         if ("encrypted".equalsIgnoreCase(status)) {
2032             return DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE;
2033         } else if ("unencrypted".equalsIgnoreCase(status)) {
2034             return DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE;
2035         } else {
2036             return DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED;
2037         }
2038     }
2039

三、最后调用

http://osxr.org/android/source/frameworks/base/services/java/com/android/server/DevicePolicyManagerService.java#2029
2005     /**
2006      * Get the current encryption status of the device.
2007      */
2008     public int getStorageEncryptionStatus() {
2009         return getEncryptionStatus();

2010     }

四、settings的使用(一)

http://osxr.org/android/source/packages/apps/Settings/src/com/android/settings/SecuritySettings.java#0145

0140         // Add options for device encryption
0141         DevicePolicyManager dpm =
0142                 (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
0143 
0144         if (UserId.myUserId() == 0) {
0145             switch (dpm.getStorageEncryptionStatus()) {
0146             case DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE:
0147                 // The device is currently encrypted.
0148                 addPreferencesFromResource(R.xml.security_settings_encrypted);
0149                 break;
0150             case DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE:
0151                 // This device supports encryption but isn't encrypted.
0152                 addPreferencesFromResource(R.xml.security_settings_unencrypted);
0153                 break;
0154             }
0155         }

四、setting的使用(二)

0017 package com.android.settings;
0018 
0019 import android.app.Activity;
0020 import android.app.Fragment;
0021 import android.app.StatusBarManager;
0022 import android.content.Context;
0023 import android.content.Intent;
0024 import android.os.Bundle;
0025 import android.os.Handler;
0026 import android.os.IBinder;
0027 import android.os.ServiceManager;
0028 import android.os.storage.IMountService;
0029 import android.util.Log;
0030 import android.view.LayoutInflater;
0031 import android.view.View;
0032 import android.view.ViewGroup;
0033 import android.widget.Button;
0034 
0035 public class CryptKeeperConfirm extends Fragment {
0036 
0037     public static class Blank extends Activity {
0038         private Handler mHandler = new Handler();
0039 
0040         @Override
0041         public void onCreate(Bundle savedInstanceState) {
0042             super.onCreate(savedInstanceState);
0043 
0044             setContentView(R.layout.crypt_keeper_blank);
0045 
0046             if (Utils.isMonkeyRunning()) {
0047                 finish();
0048             }
0049 
0050             StatusBarManager sbm = (StatusBarManager) getSystemService(Context.STATUS_BAR_SERVICE);
0051             sbm.disable(StatusBarManager.DISABLE_EXPAND
0052                     | StatusBarManager.DISABLE_NOTIFICATION_ICONS
0053                     | StatusBarManager.DISABLE_NOTIFICATION_ALERTS
0054                     | StatusBarManager.DISABLE_SYSTEM_INFO
0055                     | StatusBarManager.DISABLE_HOME
0056                     | StatusBarManager.DISABLE_RECENT
0057                     | StatusBarManager.DISABLE_BACK);
0058 
0059             // Post a delayed message in 700 milliseconds to enable encryption.
0060             // NOTE: The animation on this activity is set for 500 milliseconds
0061             // I am giving it a little extra time to complete.
0062             mHandler.postDelayed(new Runnable() {
0063                 public void run() {
0064                     IBinder service = ServiceManager.getService("mount");
0065                     if (service == null) {
0066                         Log.e("CryptKeeper", "Failed to find the mount service");
0067                         finish();
0068                         return;
0069                     }
0070 
0071                     IMountService mountService = IMountService.Stub.asInterface(service);
0072                     try {
0073                         Bundle args = getIntent().getExtras();
0074                         mountService.encryptStorage(args.getString("password"));
0075                     } catch (Exception e) {
0076                         Log.e("CryptKeeper", "Error while encrypting...", e);
0077                     }
0078                 }
0079             }, 700);
0080         }
0081     }
0082 
0083     private View mContentView;
0084     private Button mFinalButton;
0085     private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {
0086 
0087         public void onClick(View v) {
0088             if (Utils.isMonkeyRunning()) {
0089                 return;
0090             }
0091 
0092             Intent intent = new Intent(getActivity(), Blank.class);
0093             intent.putExtras(getArguments());
0094 
0095             startActivity(intent);
0096         }
0097     };
0098 
0099     private void establishFinalConfirmationState() {
0100         mFinalButton = (Button) mContentView.findViewById(R.id.execute_encrypt);
0101         mFinalButton.setOnClickListener(mFinalClickListener);
0102     }
0103 
0104     @Override
0105     public View onCreateView(LayoutInflater inflater, ViewGroup container,
0106             Bundle savedInstanceState) {
0107         mContentView = inflater.inflate(R.layout.crypt_keeper_confirm, null);
0108         establishFinalConfirmationState();
0109         return mContentView;
0110     }
0111 }

<string name="crypt_keeper_desc" product="tablet" msgid="3839235202103924154">"您能够加密自己的帐户、设置、已下载的应用及其数据、媒体和其它文件。加密平板电脑后。您每次开机时都须要输入数字 PIN 或password才干解密。取消加密的唯一方法就是恢复出厂设置。但这会清除平板电脑上的所有数据。"\n\n"加密过程须要 1 小时或更长时间。在開始加密前。电池必须有电,而且在加密完毕前必须一直连接电源。假设您中断加密过程。则会丢失部分或所有数据。"</string>

<string name="crypt_keeper_button_text" product="default" msgid="2008346408473255519">"加密手机"</string>

五、encryptStorage的来源

http://osxr.org/android/source/frameworks/base/core/java/android/os/storage/IMountService.java#0628

public int encryptStorage(String password) throws RemoteException {
0629                 Parcel _data = Parcel.obtain();
0630                 Parcel _reply = Parcel.obtain();
0631                 int _result;
0632                 try {
0633                     _data.writeInterfaceToken(DESCRIPTOR);
0634                     _data.writeString(password);
0635                     mRemote.transact(Stub.TRANSACTION_encryptStorage, _data, _reply, 0);
0636                     _reply.readException();
0637                     _result = _reply.readInt();
0638                 } finally {
0639                     _reply.recycle();
0640                     _data.recycle();
0641                 }
0642                 return _result;
0643             }
0644

针对手机加密之后,不插SD卡,SHARED宏开启 是无法进行OTA升级的。所以对系统进行了优化,在检測到手机加密状态之后。把升级包copy到cache文件夹以下,然后进行升级。
主要是在framework/base/.../os/ RecoverySystem.java 
在调用installpackage(context,filepackage)里面进行 处理
推断,删除Cache,拷贝文件。

设置-安全-手机加密功能解说相关推荐

  1. 设置-安全-手机加密功能讲解

    设置-安全-手机加密功能讲解         此功能可以用来加密手机上的所有数据,包括 Google 帐户.应用数据.音乐和其他媒体信息.已下载的信息等.如果执行了加密操作,您每次开机时都必须输入数字 ...

  2. android afw模式,[HUAWEI-TITANC328]手机加密功能开启后,工作区中添加超级备份手机不断重启的分析报告...

    工作区中添加超级备份手机不断重启的分析报告 [华为反馈] [TIT-AL00C328B120_AFW_必现]创建工作空间后升级系统,升级失败,手机循环重启. 通过分析log发现,实际上这个问题与OTA ...

  3. 华为手机设置页面黑色_华为手机拨号功能怎么设置 华为手机拨号功能设置方法【介绍】...

    无论智能手机发展再迅猛,通话始终是唯一的核心功能诉求.对此,今天小编就教大家3个让华为手机通话体验更加良好的技巧,感兴趣的花粉不妨往下看! 一.语音接听电话,方便的不要不要的 当有来电时不方便用手接听 ...

  4. android 加密手机功能,怎么为安卓手机加密

    随着科技的进步,手机已经成为了我们日常生活中不可或缺的一部分,而安卓手机系统更是目前只能手机的主流系统.在进入安卓时代的今天,手机的使用太过于广泛了,在我们的手机中更是存满了私密的东西.如今,安卓手机 ...

  5. 华为如何拍火烧云_华为手机拍照功能介绍-设置通用功能

    相比起OPPO手机之类的拍照手机,华为手机的拍照功能很多,对于懂得使用的人来说这些功能可以让他们拍出好照片,然而对于那些不会使用这些功能的人来说,拍出来的照片还不如OPPO之类的拍照手机拍出来的好看. ...

  6. id门禁卡复制到手机_怎么将手机当做门禁卡使用?给大家详解手机设置门禁卡功能...

    随着科技的发展,手机的功能是越来越强大了 . 门禁卡,相信大家都不陌生.进出小区都需要刷卡,自从手机可以使用微信跟支付宝支付功能以来,很少人携带钱包出门,一部手机便可以打车.吃饭付钱 等.银行卡跟身份 ...

  7. 小米手机怎么复制加密门禁卡_小米手机NFC功能复制门禁卡功能升级手册,l加密卡也能添加!...

    原标题:小米手机NFC功能复制门禁卡功能升级手册,l加密卡也能添加! 目前市面上的智能手机NFC功能开发最彻底的应该是小米手机 ,没有之一. 它不仅支持最为主流的模拟公交卡 .. 银行卡功能 ,也只有 ...

  8. 华为手机设置页面黑色_华为手机望远镜功能在哪里设置

    在苹果手机中有一个放大器功能,开启这个功能之后,在用手机拍摄时,可以调节远近,倍网友称为望远镜功能.华为支持这一功能吗?在哪里打开 华为手机望远镜功能在哪里设置 华为没有望远镜功能,如果想要拍摄超远距 ...

  9. 小米手机系统更新完无服务器,小米手机升级MIUI 11后出现卡顿?设置这几个功能,手机重回流畅...

    原标题:小米手机升级MIUI 11后出现卡顿?设置这几个功能,手机重回流畅 关于小米手机升级MIUI 11后,部分用户出现卡顿的现象,不知道大家有没有对卡顿的现象,那么针对MIUI 11的卡顿,小编就 ...

最新文章

  1. python123 https://github.com/jackfrued/Python-100-Days/tree/master/Day01-15
  2. Windows10为什么自带Linux,一直没有发现原来 Win10 内置了一个 Linux
  3. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
  4. mybatis执行查询的所有分析和创建代理对象的分析
  5. python 消息队列 sqlite_sqlite 数据存储 消息队列
  6. 日常生活小技巧 -- 百度地图坐标拾取
  7. PHP中间件--ICE
  8. Python学习笔记__4.1章 高阶函数
  9. jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)
  10. mac mongodb 安装
  11. 【数据结构与算法】字符串匹配 AC自动机
  12. linux tunl0 ip,Centos7下lvs负载均衡lvs-tun模式配置
  13. 以下属于单例模式的优点的是_单例模式的优缺点和使用场景
  14. 四选1数据选择器的VHDL程序设计
  15. word文件批量转换为txt文档
  16. uip-0[1].6中文说明
  17. C语言迷宫如何实现多个关卡,c语言实现迷宫问题#仅供借鉴
  18. 人体自身的神奇补肾法 ——你在外面花多少钱都学不到的
  19. JAVA根据PDF文件生成图片
  20. Android 应用A开启应用B

热门文章

  1. woed未响应文件没保存,解决办法
  2. php-opencv身份证识别,python opencv实现证件照换底功能
  3. [附源码]JAVA+ssm计算机毕业设计鞍山丘比特房屋租赁管理系统(程序+Lw)
  4. 区块链授权的5G异构网络安全频谱共享
  5. matlab求偏迹,矩阵的偏迹
  6. SQL ifnull、nullif 等函数
  7. 只要干不死,就往死里干
  8. 微软Office Powerpoint双击打不开后的修复办法
  9. android倒计时小工具,为五一放假倒计时《倒数日小工具》
  10. 自学Linux命令10