九宫格 PIN密码 密码锁屏
自从:API Level 8 (Android 2.2) 开始, Android提供了DevicePolicyManager类, 可以让你的应用程序也能执行屏幕锁定等操作,以下程序中会用到的锁定屏幕的操作类中要使用的对象有以下三个:
DevicePolicyManager
这是设备管理的主类。通过它可以实现屏幕锁定、屏幕亮度调节、出厂设置等功能。
DeviceAdminReceiver
该类继承自 BroadcastReceiver 。 从源码可以看到,其实就是实现了一个OnReceive方法,该方法中根据不同的Action,执行相应的操作。 比如,如果激活成功,那么Action就是ACTION_DEVICE_ADMIN_ENABLED, 据此调用 onEnabled 方法。
DeviceAdminInfo 设备信息
比如:
DeviceAdminReceiver.USES_POLICY_FORCE_LOCK , 这个就是本次要用的”强制锁定屏幕”的权限. 不过这些权限一般都直接通过XML文件来定义。 稍后你就会看到。
Android手机中手机屏幕的锁定方式有以下几种 :
点击第一个按钮会跳到权限提醒页面,如图所示:
上面这个页面只是提醒你你要激活的所有设备权限,点击激活后会跳回首页,再去点击系统锁使用时,就达到咱们的目的啦,
在全局配置文件里面配置,不然报错的,添加以下代码:
1 2 3 4 5 6 7 8 9 10 11 |
<receiver android:name=".AdminReceiver" android:description="@string/description" android:label="@string/labelValue" android:permission="android.permission.BIND_DEVICE_ADMIN" > <meta-data android:name="android.app.device_admin" android:resource="@xml/lockourscreen" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> |
完整的代码:
主类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * @Title: DevicePolicyManagerDemoActivity.java * @Description: 屏幕锁测试 */ public class DevicePolicyManagerDemoActivity extends Activity { private Button startPermissionBtn; private Button stopPermissionBtn; private Button sysLockBtn; private DevicePolicyManager dpm; private ComponentName componentName ; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //初始化 init(); } /** * 初始化实现 */ private void init(){ //资源声明定位 startPermissionBtn = (Button)findViewById(R.id.button1); stopPermissionBtn = (Button)findViewById(R.id.button2); sysLockBtn = (Button)findViewById(R.id.button3); startPermissionBtn.setOnClickListener(listener); stopPermissionBtn.setOnClickListener(listener); sysLockBtn.setOnClickListener(listener); //取得系统服务 dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); componentName = new ComponentName(this, AdminReceiver.class); } /** * 按钮监听器的实现,在实现监听的时候不要在一个分支里面写太多逻辑处理 * 分支只负责分支,不负责处理,要处理的话可以模块化,处理函数抽出去就可以了 */ private OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { //以下是三个按钮分别处理的事件实现 switch (v.getId()) { case R.id.button1: //开启设备权限 startDeviceManager(); break; case R.id.button2: //停止设备权限 stopDeviceManager(); break; case R.id.button3: //调用系统锁 sysLock(); break; default: break; } } }; /** * 启动设备管理权限 */ private void startDeviceManager() { //添加一个隐式意图,完成设备权限的添加 //这个Intent (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)跳转到 权限提醒页面 //并传递了两个参数EXTRA_DEVICE_ADMIN 、 EXTRA_ADD_EXPLANATION Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); //权限列表 //EXTRA_DEVICE_ADMIN参数中说明了用到哪些权限, intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); //描述(additional explanation) //EXTRA_ADD_EXPLANATION参数为附加的说明 intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "咿呀咿呀哟"); startActivityForResult(intent, 0); } /** * 禁用设备管理权限方法实现 */ private void stopDeviceManager() { Log.i("XXXX","------ unActiveManage ------"); boolean active = dpm.isAdminActive(componentName); if (active) { dpm.removeActiveAdmin(componentName); } } /** * 调用系统锁方法实现 */ private void sysLock() { boolean active = dpm.isAdminActive(componentName); if (active) { dpm.lockNow(); } } } |
接收类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import android.app.admin.DeviceAdminReceiver; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.util.Log; import android.widget.Toast; public class AdminReceiver extends DeviceAdminReceiver { @Override public DevicePolicyManager getManager(Context context) { Log.i("XXXX", "调用了getManager()方法"); return super.getManager(context); } @Override public ComponentName getWho(Context context) { Log.i("XXXX", "调用了getWho()方法"); return super.getWho(context); } /** * 禁用 */ @Override public void onDisabled(Context context, Intent intent) { Log.i("XXXX", "调用了onDisabled()方法"); Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show(); super.onDisabled(context, intent); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { Log.i("XXXX", "调用了onDisableRequested()方法"); return super.onDisableRequested(context, intent); } /** * 激活 */ @Override public void onEnabled(Context context, Intent intent) { Log.i("XXXX", "调用了onEnabled()方法"); Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show(); super.onEnabled(context, intent); } @Override public void onPasswordChanged(Context context, Intent intent) { Log.i("XXXX", "调用了onPasswordChanged()方法"); super.onPasswordChanged(context, intent); } @Override public void onPasswordFailed(Context context, Intent intent) { Log.i("XXXX", "调用了onPasswordFailed()方法"); super.onPasswordFailed(context, intent); } @Override public void onPasswordSucceeded(Context context, Intent intent) { Log.i("XXXX", "调用了onPasswordSucceeded()方法"); super.onPasswordSucceeded(context, intent); } @Override public void onReceive(Context context, Intent intent) { Log.i("XXXX", "调用了onReceive()方法"); super.onReceive(context, intent); } @Override public IBinder peekService(Context myContext, Intent service) { Log.i("XXXX", "调用了peekService()方法"); return super.peekService(myContext, service); } } |
权限文件lockourscreen.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0" encoding="UTF-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <!-- 强行锁定 --> <force-lock /> <!-- 因为今天我们只讲下简单的,所以其它的权限,先暂时注释掉咯,有兴趣的朋友们可以打开自己试下--> <!-- 清除所有数据(恢复出厂设置)--> . <wipe-data /> . <!-- 重置密码 --> . <reset-password /> . <!-- 限制密码选择--> . <limit-password /> . <!-- 监控登录尝试 --> . <watch-login /> . . </uses-policies> . </device-admin> |
全局配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xxxxx.yyy" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".DevicePolicyManagerDemoActivity" android:label="欢迎交流" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".AdminReceiver" android:description="@string/description" android:label="@string/labelValue" android:permission="android.permission.BIND_DEVICE_ADMIN" > <meta-data android:name="android.app.device_admin" android:resource="@xml/lockourscreen"/> . <intent-filter> . <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> . </intent-filter> . . </receiver> . </application> . . </manifest> |
密码锁:
九宫格锁:
主控制类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.Intent; mport android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; mport android.widget.Spinner; import android.widget.TextView; /** * @Title: PolicySetupActivity.java * @Description: 屏幕锁 */ public class PolicySetupActivity extends Activity { private static final int REQ_ACTIVATE_DEVICE_ADMIN = 10; private static final String SCREEN_ID_KEY = "LAYOUT_ID"; /**存储配置信息的SP文件名*/ private static final String APP_PREF = "APP_PREF"; /**有未知屏幕ID时返回此标识*/ private static final int UNKNOWN_SCREEN_ID = -1; /**声明组件*/ private Spinner mPasswordQualityInputField; private EditText mPasswordLengthInputField; private EditText mPasswordMinUppercaseInputField; /**获取配置操作类对象*/ private Policy mPolicy; /**当前屏幕ID*/ private int mCurrentScreenId; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPolicy = new Policy(this); } @Override protected void onResume() { super.onResume(); /**获取本地SP文件中屏幕锁的配置信息*/ SharedPreferences prefs = getSharedPreferences(APP_PREF, MODE_PRIVATE); final int savedScreenId = prefs.getInt(SCREEN_ID_KEY, UNKNOWN_SCREEN_ID); /**如果获取到的ID为空,则跳转到设置页*/ if (savedScreenId == UNKNOWN_SCREEN_ID || !mPolicy.isAdminActive()) { setScreenContent(R.layout.activity_policy_setup); /**跳转到配置详情页*/ } else { setScreenContent(savedScreenId); } } /** * 设置屏幕方法实现,详细的可以自己看下官方文档 * @param screenId */ private void setScreenContent(final int screenId) { /**记录当前屏幕ID,并预先存入本地SP配置文件中*/ mCurrentScreenId = screenId; setContentView(mCurrentScreenId); getSharedPreferences(APP_PREF, MODE_PRIVATE).edit().putInt(SCREEN_ID_KEY, mCurrentScreenId).commit(); switch (mCurrentScreenId) { case R.layout.activity_policy_setup: initPolicySetupScreen(); initNavigation(); break; case R.layout.activity_view_policy: initViewPolicyScreen(); initNavigation(); break; } } /** * 关闭页面时将当前配置写入本地SP文件中 */ @Override protected void onPause() { super.onPause(); if (mCurrentScreenId == R.layout.activity_policy_setup) { writePolicy(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQ_ACTIVATE_DEVICE_ADMIN && resultCode == RESULT_OK) { // User just activated the application as a device administrator. setScreenContent(mCurrentScreenId); } else { super.onActivityResult(requestCode, resultCode, data); } } /** * 重载返回键方法,如果已当前屏幕为已设置密码页,则展示详情 */ @Override public void onBackPressed() { if (mCurrentScreenId == R.layout.activity_view_policy) { setScreenContent(R.layout.activity_policy_setup); return; } super.onBackPressed(); } /** * 初始化化设置页 */ private void initPolicySetupScreen() { mPasswordQualityInputField = (Spinner) findViewById(R.id.policy_password_quality); mPasswordLengthInputField = (EditText) findViewById(R.id.policy_password_length); mPasswordMinUppercaseInputField = (EditText) findViewById(R.id.policy_password_uppercase); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.password_types, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mPasswordQualityInputField.setAdapter(adapter); mPasswordQualityInputField.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { LinearLayout passwordMinUppercaseView =(LinearLayout) findViewById(R.id.password_uppercase_view); // The minimum number of upper case field is only applicable for password // qualities: alpha, alphanumeric, or complex. if (pos > 2) passwordMinUppercaseView.setVisibility(View.VISIBLE); else passwordMinUppercaseView.setVisibility(View.GONE); } public void onNothingSelected(AdapterView<?> parent) {} }); /**阅读先前配置的相关信息*/ mPolicy.readFromLocal(); mPasswordQualityInputField.setSelection(mPolicy.getPasswordQuality()); if (mPolicy.getPasswordLength() > 0) { mPasswordLengthInputField.setText(String.valueOf(mPolicy.getPasswordLength())); } else { mPasswordLengthInputField.setText(""); } if (mPolicy.getPasswordMinUpperCase() > 0) { mPasswordMinUppercaseInputField.setText(String.valueOf(mPolicy.getPasswordMinUpperCase())); } else { mPasswordMinUppercaseInputField.setText(""); } } /** * 初始化查看详情页 */ private void initViewPolicyScreen() { TextView passwordQualityView = (TextView) findViewById(R.id.policy_password_quality); TextView passwordLengthView = (TextView) findViewById(R.id.policy_password_length); // Read previously saved policy and populate on the UI. mPolicy.readFromLocal(); int passwordQualitySelection = mPolicy.getPasswordQuality(); passwordQualityView.setText(getResources().getStringArray(R.array.password_types)[passwordQualitySelection]); passwordLengthView.setText(String.valueOf(mPolicy.getPasswordLength())); if (passwordQualitySelection > 2) { LinearLayout passwordMinUppercaseView =(LinearLayout) findViewById(R.id.password_uppercase_view); passwordMinUppercaseView.setVisibility(View.VISIBLE); ((TextView)findViewById(R.id.policy_password_uppercase)).setText(String.valueOf(mPolicy.getPasswordMinUpperCase())); } } /** * 设置导航信息 */ private void initNavigation() { if (!mPolicy.isAdminActive()) { // Activates device administrator. setupNavigation(R.string.setup_message_activate,R.string.setup_action_activate,mActivateButtonListener); } else if (mCurrentScreenId == R.layout.activity_policy_setup) { setupNavigation( R.string.setup_message_set_policy, R.string.setup_action_set_policy, new View.OnClickListener() { public void onClick(View view) { writePolicy(); mPolicy.configurePolicy(); setScreenContent(R.layout.activity_view_policy); } }); }else if (!mPolicy.isActivePasswordSufficient()) { // Launches password set-up screen in Settings. setupNavigation(R.string.setup_message_enforce_policy,R.string.setup_action_enforce_policy,mEnforcePolicyListener); } else { // Grants access to secure content. setupNavigation( R.string.setup_message_go_secured, R.string.setup_action_go_secured, new View.OnClickListener() { public void onClick(View view) { startActivity(new Intent(view.getContext(), SecureActivity.class)); } }); } } /** * 监听器实现 */ private View.OnClickListener mActivateButtonListener = new View.OnClickListener() { @Override public void onClick(View v) { // First, persist the policy. Then, launch intent to trigger the system screen // requesting user to confirm the activation of the device administrator. writePolicy(); Intent activateDeviceAdminIntent =new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); activateDeviceAdminIntent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,mPolicy.getPolicyAdmin()); // It is good practice to include the optional explanation text to explain to // user why the application is requesting to be a device administrator. The system // will display this message on the activation screen. activateDeviceAdminIntent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, getResources().getString(R.string.device_admin_activation_message)); startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN); } }; /** * 监听器实现 */ private View.OnClickListener mEnforcePolicyListener = new View.OnClickListener() { @Override public void onClick(View v) { writePolicy(); // The device administration API does not "fix" the password if it is // determined that the current password does not conform to what is requested // by the policy. The caller is responsible for triggering the password set up // screen via the below intent. Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent); } }; /** * 设置激活按钮不同状态时的文本信息 * @param messageResId * @param buttonTextResId * @param listener */ private void setupNavigation(int messageResId, int buttonTextResId,View.OnClickListener listener) { TextView setupMessage = (TextView) findViewById(R.id.setup_message); setupMessage.setText(messageResId); Button actionBtn = (Button) findViewById(R.id.setup_action_btn); actionBtn.setText(buttonTextResId); actionBtn.setOnClickListener(listener); } // 在关闭此页时,将配置信息写入本地SP文件中. private void writePolicy() { int passwordQuality = (int) mPasswordQualityInputField.getSelectedItemId(); int passwordLength = 0; try { passwordLength = Integer.valueOf(mPasswordLengthInputField.getText().toString()); } catch (NumberFormatException nfe) {} // Defaults to 0. int passwordMinUppercase = 0; try { passwordMinUppercase =Integer.valueOf(mPasswordMinUppercaseInputField.getText().toString()); } catch (NumberFormatException nfe) {} // Defaults to 0. mPolicy.saveToLocal(passwordQuality, passwordLength, passwordMinUppercase); } } |
配置操作类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
import android.app.Activity; import android.app.admin.DeviceAdminReceiver; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; /** * @Title: Policy.java * @Package com.xxxxx.policymanager.demo * @Description: 用来获取相关安全配置信息的类 */ public class Policy { public static final int REQUEST_ADD_DEVICE_ADMIN = 1; /**保存屏幕锁相关参数的SP文件名*/ private static final String APP_PREF = "APP_PREF"; /**下面三个是往SP中存储时的Key*/ private static final String KEY_PASSWORD_LENGTH = "PW_LENGTH"; private static final String KEY_PASSWORD_QUALITY = "PW_QUALITY"; private static final String KEY_PASSWORD_MIN_UPPERCASE = "PW_MIN_UPPERCASE"; /** * 下面是可允许输入密码的类型,此处的类型必须与string.xml文件中定义的arrays.xml中的相匹配 */ final static int[] PASSWORD_QUALITY_VALUES = new int[] { DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX }; private int mPasswordQuality; private int mPasswordLength; private int mPasswordMinUpperCase; private Context mContext; private DevicePolicyManager mDPM; private ComponentName mPolicyAdmin; /** * 构造器,在new此类对象时,获取系统级管理员对象 DevicePolicyManager * @param context */ public Policy(Context context) { mContext = context; mPasswordQuality = -1; mPasswordLength = 0; mPasswordMinUpperCase = 0; mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); mPolicyAdmin = new ComponentName(context, PolicyAdmin.class); } /** * 保存设备参数 */ public void saveToLocal(int passwordQuality, int passwordLength, int passwordMinUppercase) { SharedPreferences.Editor editor =mContext.getSharedPreferences(APP_PREF, Context.MODE_PRIVATE).edit(); if (mPasswordQuality != passwordQuality) { editor.putInt(KEY_PASSWORD_QUALITY, passwordQuality); mPasswordQuality = passwordQuality; } if (mPasswordLength != passwordLength) { editor.putInt(KEY_PASSWORD_LENGTH, passwordLength); mPasswordLength = passwordLength; } if (mPasswordMinUpperCase != passwordMinUppercase) { editor.putInt(KEY_PASSWORD_MIN_UPPERCASE, passwordMinUppercase); mPasswordMinUpperCase = passwordMinUppercase; } editor.commit(); } /** * 从本地SP文件中获取密码配置参数 */ public void readFromLocal() { SharedPreferences prefs = mContext.getSharedPreferences(APP_PREF, Context.MODE_PRIVATE); mPasswordQuality = prefs.getInt(KEY_PASSWORD_QUALITY, -1); mPasswordLength = prefs.getInt(KEY_PASSWORD_LENGTH, -1); mPasswordMinUpperCase = prefs.getInt(KEY_PASSWORD_MIN_UPPERCASE, -1); } /** * 获取密码. * * @return */ public int getPasswordQuality() { return mPasswordQuality; } /** * 获取密码长度. * * @return */ public int getPasswordLength() { return mPasswordLength; } /** * 获取字母密码. * * @return */ public int getPasswordMinUpperCase() { return mPasswordMinUpperCase; } /** * 获取设备管理的 ComponentName 对象. * * @return */ public ComponentName getPolicyAdmin() { return mPolicyAdmin; } /** * 判断设备是否被激活. * * @return */ public boolean isAdminActive() { return mDPM.isAdminActive(mPolicyAdmin); } public boolean isActivePasswordSufficient() { return mDPM.isActivePasswordSufficient(); } /** * 判断设备是否加安全 * @return */ public boolean isDeviceSecured() { return isAdminActive() && isActivePasswordSufficient(); } /** * 在声明的mDPM对象中进行配置. */ public void configurePolicy() { mDPM.setPasswordQuality(mPolicyAdmin, PASSWORD_QUALITY_VALUES[mPasswordQuality]); mDPM.setPasswordMinimumLength(mPolicyAdmin, mPasswordLength); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { mDPM.setPasswordMinimumUpperCase(mPolicyAdmin, mPasswordMinUpperCase); } } /** * 下面这个类用来监听各种不同类型的设备管理事件,比如:改变密码..错误密码等等 */ public static class PolicyAdmin extends DeviceAdminReceiver { @Override public void onDisabled(Context context, Intent intent) { // Called when the app is about to be deactivated as a device administrator. super.onDisabled(context, intent); SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE); /**清除以前在SP文件下保存的所有值*/ prefs.edit().clear().commit(); } } } |
权限验证类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import android.app.Activity; import android.content.Intent; /** * @Title: SecureActivity.java * @Package com.xxxxx.policymanager.demo * @Description: 权限验证类实现 */ public class SecureActivity extends Activity { @Override protected void onResume() { super.onResume(); // Check to see if the device is properly secured as per the policy. Send user // back to policy set up screen if necessary. Policy policy = new Policy(this); policy.readFromLocal(); if (!policy.isDeviceSecured()) { Intent intent = new Intent(); intent.setClass(this, PolicySetupActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); } setContentView(R.layout.activity_secure); } } |