当前位置: 首页 > news >正文

公司手机app开发公司服务好的镇江网站优化

公司手机app开发公司,服务好的镇江网站优化,自己建网站卖东西,中国搜索摘要:本文通过广播的方式调用系统设置PIN码的流程实现类似锁机的功能,可供开发人员在联网状态下后台推送消息进行锁机/解锁。有需要的同学可以参考PIN码的流程改为密码等其他形式。 1 定义一个广播接收器 广播action:android.intent.action…

摘要:本文通过广播的方式调用系统设置PIN码的流程实现类似锁机的功能,可供开发人员在联网状态下后台推送消息进行锁机/解锁。有需要的同学可以参考PIN码的流程改为密码等其他形式。

1 定义一个广播接收器

广播action:android.intent.action.LOCKDEVICE
boolean extra: lock (true:锁机/false:解锁)
String extra: password (6位数字密码,后续代码会进行合法性检测)

        <receiver android:name=".LockDeviceReceiver"android:exported="true"><intent-filter>    <action android:name="android.intent.action.LOCKDEVICE"/></intent-filter></receiver>

2 功能实现

代码部分注释为 android 9之前的实现方式。

import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
import static com.android.internal.widget.PasswordValidationError.RECENTLY_USED;import android.app.admin.PasswordMetrics;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
import android.util.Log;import com.android.internal.widget.LockPatternChecker;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockscreenCredential;
import com.android.internal.widget.PasswordValidationError;import java.util.Collections;
import java.util.List;/*** Boot completed receiver. used to reset the app install state every time the* device boots.**/
public class LockDeviceReceiver extends BroadcastReceiver {private static String TAG ="LockDeviceReceiver";private byte[] mPasswordHistoryHashFactor;private LockPatternUtils mLockPatternUtils;private LockscreenCredential mChosenPassword;private LockscreenCredential mCurrentCredential;@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if ("android.intent.action.LOCKDEVICE".equals(action)) {boolean isLock = intent.getBooleanExtra("lock", false);String password = intent.getStringExtra("password");mLockPatternUtils = new LockPatternUtils(context);if (isLock) {lockDevice(context, password);} else {unlockDevice(context, password);}return;}}private void lockDevice(Context context, String password) {mChosenPassword = LockscreenCredential.createPin(password);//int mRequestedQuality = mLockPatternUtils.computePasswordQuality(LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, password, DevicePolicyManager.PASSWORD_QUALITY_NUMERIC);if (password.length() == 6 && validatePassword(mChosenPassword)) {//mLockPatternUtils.setCredentialRequiredToDecrypt(false);//mLockPatternUtils.saveLockPassword(password, null, mRequestedQuality, UserHandle.myUserId());final boolean success = mLockPatternUtils.setLockCredential(mChosenPassword, LockscreenCredential.createNone(), UserHandle.myUserId());Log.d(TAG, "lockDevice " + (success ? "success" : "unsuccess"));} else {Log.d(TAG, "invalid password!");}}private void unlockDevice(Context context, String password) {LockscreenCredential credential = LockscreenCredential.createPin(password);LockPatternChecker.checkCredential(mLockPatternUtils,credential,UserHandle.myUserId(),new LockPatternChecker.OnCheckCallback() {@Overridepublic void onChecked(boolean matched, int timeoutMs) {if (matched) {//mLockPatternUtils.setSeparateProfileChallengeEnabled(UserHandle.myUserId(), true, credential);//mLockPatternUtils.clearLock(password, UserHandle.myUserId());//mLockPatternUtils.setLockScreenDisabled(true, UserHandle.myUserId());final boolean success = mLockPatternUtils.setLockCredential(LockscreenCredential.createNone(), LockscreenCredential.createPinOrNone(password), UserHandle.myUserId());mLockPatternUtils.setLockScreenDisabled(true, UserHandle.myUserId());Log.d(TAG, "unlockDevice " + (success ? "success" : "unsuccess"));} else {Log.d(TAG, "Password do not match");}}});}boolean validatePassword(LockscreenCredential credential) {final byte[] password = credential.getCredential();List<PasswordValidationError> mValidationErrors = PasswordMetrics.validatePassword(new PasswordMetrics(CREDENTIAL_TYPE_NONE), PASSWORD_COMPLEXITY_NONE, true, password);if (mValidationErrors.isEmpty() &&  mLockPatternUtils.checkPasswordHistory(password, getPasswordHistoryHashFactor(), UserHandle.myUserId())) {mValidationErrors =Collections.singletonList(new PasswordValidationError(RECENTLY_USED));}return mValidationErrors.isEmpty();}private byte[] getPasswordHistoryHashFactor() {if (mPasswordHistoryHashFactor == null) {mPasswordHistoryHashFactor = mLockPatternUtils.getPasswordHistoryHashFactor(mCurrentCredential != null ? mCurrentCredential: LockscreenCredential.createNone(), UserHandle.myUserId());}return mPasswordHistoryHashFactor;}
}

3 其他注意

广播需要在系统管理中添加,避免被拦截。

http://www.yayakq.cn/news/488810/

相关文章:

  • 建网站的步骤和方法济南网络公司招聘
  • 个人网站怎么维护wordpress填表
  • 冠县网站建设gxsh晋江论坛网
  • 网站建设 探索app和手机网站的区别
  • 期刊类网站建设网站设计工
  • 购物网站项目建设内容百度查关键词显示排名
  • 东莞个人网站制作网站建立服务
  • html淘宝店铺网站模板按城市亭湖建设局网站
  • 深圳中心网站建设企业网站的类型包括
  • 河南省建设厅网网站交换链接案例
  • 素材下载解析接口网站开发wordpress安装失败
  • 如何做html网站广西建设网电子证查询打印
  • 网站建设核心系统关于做无机化学实验的网站
  • 编程自学免费网站wordpress用什么数据库
  • 欧洲网站设计虚拟主机怎么弄网站
  • 网站续费如何做分录wordpress中文清爽博客主题:jishuzh主题分享
  • 天津建设项目验收公示网站网站架设
  • 佛山品牌网站设计页面设计及逻辑方案
  • 网站备案 公司建设工程检测报告查询网站
  • 岚山区建设局网站网站一键收录
  • 外贸网站怎么做关键词上海建设集团有限公司
  • 服装网站建设策划案中国外贸人才网
  • 长沙建站智找有为太极兰州新区建设厅网站
  • 网站改版升级总结电话网站源码
  • 广州网站制作开发公司网站的企业特色展示
  • 做门户网站需要注册公司吗网站域名什么意思
  • 温州优化网站凡科网上商城
  • 南宁seo网站建设手机做网站公司
  • 网站如何判断做的好不好网站php怎么做
  • 蛋糕设计网站百度总部投诉电话