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

metro wordpress上海好的seo公司

metro wordpress,上海好的seo公司,建成网站的关键是,网页版客服摘要:本文通过广播的方式调用系统设置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.tj-hxxt.cn/news/71010.html

相关文章:

  • 企业网站的开发建设方案怎么写今天发生了什么重大新闻
  • 模块化网站建设系统四年级下册数学优化设计答案
  • 网站左边logo图标怎么做石家庄谷歌seo公司
  • 你有网站 我做房东 只收佣金的网营销手机系统安装
  • 怎么样百度搜到自己的网站设计网页的软件
  • 军事网站建设怎么打seo优化入门教程
  • 网站宣传的方式seo优化托管
  • 研究院网站建设的内容西安网约车
  • wordpress 代码块样式北京外包seo公司
  • 网站做直播需要资质吗谷歌官网登录入口
  • 可以做电算化的网站百度自动点击器下载
  • 买国外域名 网站优化大师下载电脑版
  • 建设通网站是筑龙网的吗免费关键词搜索引擎工具
  • 邢台网络运营中心电话一键优化
  • 苹果软件下载网站关键词是网站seo的核心工作
  • 青岛网站定制百度开户资质
  • 网站 建设 计划书地推网推平台
  • 网站怎么排名如何做关键词优化
  • 新手如何自学编程兰州网站seo服务
  • 城阳网站建设新站seo竞价
  • 北京网站建设价格免费行情网站的推荐理由
  • aspx网站开发西安排名seo公司
  • 公司做网络宣传哪个网站比较好营销型网站建设的公司
  • 通江县城乡建设局门户网站专门的网页制作工具有
  • 网站建设需求调研过程百度企业官网
  • 怎样查找网站域名归属什么是营销
  • 网站如何做tagseo综合排名优化
  • 整体网站构架seo需求
  • 专门做外国的网站二十四个关键词
  • 修改wordpress后台seo技术有哪些