1. 程式人生 > >android手勢解鎖-------後臺恢復到前臺就啟動手勢解鎖

android手勢解鎖-------後臺恢復到前臺就啟動手勢解鎖

我們在使用支付寶的時候會發現,每次我們按下返回鍵或者home鍵回到桌面之後,再次開啟此app時就會要求我們輸入手勢,正確輸入後會回到我們退出app時的activity,這個效果該如何實現呢。。。

首先我們要為所有需要後臺恢復前臺啟動手勢解鎖的activity寫一個baseActivity,在這個baseActivity中,在說要重寫那幾個方法之前,先要做的是分析,activity的宣告週期。。。當我們單擊返回鍵的時候activity會執行 onpause->onstop->ondestory,重啟應用會執行oncreate->onstart->onresume。當我們點選home鍵的時候會執行onPause->onStop,重啟應用會執行onRestart->onstart->onresume,可以明確的是都會執行onstop方法、onstart方法、onPause方法以及onresume方法,這裡就挑選onstop方法、onresume

方法這兩個方法進行重寫,onstop方法中要做的事情是判斷該app是否還在前臺執行,並且用標誌位記錄已經在後臺。在resume方法中判斷標誌位,如果已經在後臺執行則先啟動手勢activity,否則不做任何操作。

BaseActivity的程式碼如下

public class BaseActivity extends Activity {

	static boolean isActive = true;

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		if(!isAppOnFreground()){
			Log.d("sqq", "back");
			isActive = false;
		}
	}

	@Override
	protected void onResume() {
		super.onResume();
		if(!isActive){
			//從後臺喚醒
			isActive = true;
			Intent n = new Intent(this, MainActivity.class);
			startActivity(n);
		}
	}
	
	/**
	 * 是否在後臺
	 * @return
	 */
	public boolean isAppOnFreground(){
		ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
		String curPackageName = getApplicationContext().getPackageName();
		List<RunningAppProcessInfo> app = am.getRunningAppProcesses();
		if(app==null){
			return false;
		}
		for(RunningAppProcessInfo a:app){
			if(a.processName.equals(curPackageName)&&
					a.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
				return true;
			}
		}
		return false;
		/*ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
		if(!TextUtils.isEmpty(curPackageName)&&curPackageName.equals(getPackageName())){
			return true;
		}
		return false;*/
	}
	
}

每次恢復前臺需要驗證手勢的activity的實現如下
public class SetActivity extends BaseActivity {

	Button bt;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.set);
		bt = (Button) findViewById(R.id.set);
		bt.setText("設定手勢");
		bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				Intent n = new Intent(SetActivity.this, MainActivity.class);
				startActivity(n);
			}
		});
	}
}

注意MainActivity就是輸入手勢的頁面

完整的專案稍後上傳,不過結合上一篇應該也能自己補充完整,不妨自己先試試。