本文属于学习分享,如有雷同纯属巧合 怎么会有雷同呢?

    本着技术分享,学习互助的原则,我在此分享一款已经开源的android 图案解锁的实现。

项目地址:https://code.google.com/p/android-lockpattern/  (考虑到要,才写了这个demo)

它也是参考了android自带的图案锁的源码而修改的,可以作为app来调用。

先看看实现效果吧!


    开始说说这个demo的结构吧,首先下载源码,把android-lockpattern作为lib来使用

[Android UI]android-lockpattern图案解锁的实现分享_第1张图片

1.创建demo,先把haibison.android.lockpattern.LockPatternActivity.java拷到我们的项目里,他就是图案的activity,我们可以自己在里面改逻辑;然后配置AndroidManifest.xml,加上如下的配置

                 

2.好了我们来看看最简单实惠的主Activity,三个按钮:创建新的图案,比较图案,生成随机图案,具体的功能和使用请看代码,我已经写的很清楚了。

/** * demo主界面(习惯) * @author jan */public class MainActivity extends Activity implements OnClickListener {private static final String TAG = "MainActivity";//请求创建一个新的图案private static final int REQ_CREATE_PATTERN = 1;//比较已有的图案private static final int REQ_COMPARE_PATTERN = 2;//生成随机的图案(个人感觉没啥用(#--)/ .)private static final int REQ_VERIFY_PATTERN = 3;//对比测试的密文,代表一个patternprivate String testChars = "101b2a675e9fb9546336d5b9ef70418b594184f4";private Button openLockPatternBtn,compareButton,verifyModeButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//lockpattern会使用Sharepreference自动保存密文AlpSettings.Security.setAutoSavePattern(this, true);//隐身模式:不显示勾画的连接线,默认关闭AlpSettings.Display.setStealthMode(this, false);//启用自定义的解析方式 默认使用SHA1算法摘要////        //    //AlpSettings.Security.setEncrypterClass(this, LPEncrypter.class);openLockPatternBtn = (Button) findViewById(R.id.open_button);openLockPatternBtn.setOnClickListener(this);compareButton = (Button) findViewById(R.id.compare_button);compareButton.setOnClickListener(this);verifyModeButton = (Button) findViewById(R.id.verify_button);verifyModeButton.setOnClickListener(this);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case REQ_CREATE_PATTERN:if (resultCode == RESULT_OK) {char[] pattern = data.getCharArrayExtra(LockPatternActivity.EXTRA_PATTERN);StringBuffer buffer = new StringBuffer();for(char c:pattern){buffer.append(c);}Log.i(TAG, "result=>"+buffer.toString());Toast.makeText(this, "消息摘要:"+buffer, Toast.LENGTH_SHORT).show();//test:101b2a675e9fb9546336d5b9ef70418b594184f4}break;case REQ_COMPARE_PATTERN:        /*         * 注意!有四种可能出现情况的返回结果         */        switch (resultCode) {        case RESULT_OK:            //用户通过验证        Log.d(TAG, "user passed");            break;        case RESULT_CANCELED:            // 用户取消        Log.d(TAG, "user cancelled");            break;        case LockPatternActivity.RESULT_FAILED:            //用户多次失败        Log.d(TAG, "user failed");            break;        case LockPatternActivity.RESULT_FORGOT_PATTERN:            // The user forgot the pattern and invoked your recovery Activity.        Log.d(TAG, "user forgot");            break;        }        /*         * 在任何情况下,EXTRA_RETRY_COUNT都代表着用户尝试的图案的次数         */        int retryCount = data.getIntExtra(                LockPatternActivity.EXTRA_RETRY_COUNT, 0);        Log.i(TAG, "用户尝试了"+retryCount+"次数");break;}}@Overridepublic void onClick(View v) {switch (v.getId()) {//打开一个新的图案case R.id.open_button:Intent intent = new Intent(LockPatternActivity.ACTION_CREATE_PATTERN, null, this,LockPatternActivity.class);startActivityForResult(intent, REQ_CREATE_PATTERN);break;//对指定保存的图案做比较case R.id.compare_button:char[] savedPattern = testChars.toCharArray();Intent compare = new Intent(LockPatternActivity.ACTION_COMPARE_PATTERN, null,        this, LockPatternActivity.class);compare.putExtra(LockPatternActivity.EXTRA_PATTERN, savedPattern);startActivityForResult(compare, REQ_COMPARE_PATTERN);break;//随机图案case R.id.verify_button://设置验证的显示次数,默认是4次AlpSettings.Display.setCaptchaWiredDots(this, 9);Intent verifyIntent = new Intent(LockPatternActivity.ACTION_VERIFY_CAPTCHA, null,        this, LockPatternActivity.class);startActivityForResult(verifyIntent, REQ_VERIFY_PATTERN);break;}}}
3.对于图案锁的默认加密方式是SHA1( Secure Hash Algorithm),传说中的安全哈希算法,感觉和MD5差不多,如果你需要自己实现自己的加解密方式,只要实现haibison.android.lockpattern.util.IEncrypter这个接口,然后设置一下:AlpSettings.Security.setEncrypterClass(this, LPEncrypter.class);

/** * 可提供自定义的加密码方式  */public class LPEncrypter implements IEncrypter {@Overridepublic char[] encrypt(Context context, List pattern) {//这只是一个简单的demo,用了很二的加密方式,参考而已。StringBuilder result = new StringBuilder();for (Cell cell : pattern)result.append(Integer.toString(cell.getId() + 1)).append('-');return result.substring(0, result.length() - 1).toCharArray();}@Overridepublic List decrypt(Context context, char[] encryptedPattern) {List result = Lists.newArrayList();String[] ids = new String(encryptedPattern).split("[^0-9]");for (String id : ids)result.add(Cell.of(Integer.parseInt(id) - 1));return result;}}

4.结束,使用起来就这么简单,具体的修改看你的需求,这里不再讨论,最后留下demo下载链接, 打开如意门

抱歉忘记传lib了




更多相关文章

  1. Android中实现跨进程通信(IPC)的方式(三)之观察者模式
  2. Android快捷方式
  3. Android中常用的有四种保存方式
  4. 【Android】adb connect 手机的两种方式
  5. Android Bitmap的常用压缩方式
  6. Android实现XML解析的三种方式
  7. Android实现关机和重启的几种方式
  8. android 将app添加进入文件的打开方式
  9. android 数据储存——--SQLite存储方式(3)

随机推荐

  1. 特朗普打压微信,苹果不好受
  2. Android(安卓)SDK Platform 4.4.2【离线
  3. Android多线程--HandlerThread用法
  4. IntentTest
  5. 获取mic音量大小
  6. android在线播放mp4/3gp
  7. 一行代码引来的安全漏洞就让我们丢失了整
  8. android禁止状态栏下拉
  9. introduction to JAVA-based open-source
  10. android app 内部文件路径