Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [Android UI]android-lockpattern圖案解鎖的實現分享

[Android UI]android-lockpattern圖案解鎖的實現分享

編輯:關於Android編程

本文屬於學習分享,如有雷同純屬巧合 大笑怎麼會有雷同呢?

本著技術分享,學習互助的原則,我在此分享一款已經開源的android 圖案解鎖的實現。

 

它也是參考了android自帶的圖案鎖的源碼而修改的,可以作為app來調用。

先看看實現效果吧!

\

開始說說這個demo的結構吧,首先下載源碼,把android-lockpattern作為lib來使用

\

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;
	//對比測試的密文,代表一個pattern
	private String testChars = 101b2a675e9fb9546336d5b9ef70418b594184f4;
	private Button openLockPatternBtn,compareButton,verifyModeButton;

	@Override
	protected 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);
	}

	@Override
	protected 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;
		}
	}

	@Override
	public 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 {

	@Override
	public 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();
	}

	@Override
	public 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下載鏈接,打開如意門

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved