Androidの世界におけるプログラムロックの実現


私たちはプログラムのためにパスワードを設定した後、初めてこのプログラムに入る時にパスワードを入力してくださいとヒントを与えられます.正しいパスワードを入力してから引き続きこのプログラムにアクセスできます.もし再度このプログラムにアクセスすると、パスワードを入力するようにヒントを与えられません.これは市販のプログラムロックの実現です.
開発の考え方:
1.サービスを開始し、サービスの中でデッドサイクルを起動し、このデッドサイクルは現在アクセスしているプログラムがロックされているかどうかを確認するためのプログラムであり、そうであればパスワード入力ダイアログをポップアップする.ロックされたプログラムをデータベースで保存します.
2.パスワードはxmlに保存されていますが、パスワードが合ったらプログラム画面に入ります.
3.同じプログラムに複数回入らないようにするためにブーメラン変数を使用してパスワードダイアログを表示します.
キーコード:
コアコード
	public void onCreate() {
		//dao
		lockAppDao = new LockAppDao(getApplicationContext());
		//             
		blockapppacks = lockAppDao.findAll();
		//                     
		blockappinfos = new ArrayList<LockAppInfo>();
		fillData(blockapppacks);
		//   activity    
		activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
		intent = new Intent(this, EnterPasswordActivity.class);
		//           activity   
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		new Thread() {
			@Override
			public void run() {
				//    ,        activity      
				while (true) {
					//             , get(0)          activity
					String packname = activityManager.getRunningTasks(1).get(0).topActivity
							.getPackageName();
					for (LockAppInfo apppackinfo : blockappinfos) {
						if (packname.equals(apppackinfo.getPackname())) {
							//           
							if (!apppackinfo.isFlagcanstart()) {
								//        ,    activity         activity
								intent.putExtra("packagename", packname);
								startActivity(intent);
							}
						}
					}
					try {
						Thread.sleep(200);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start();
		super.onCreate();
	}

	private void fillData(List<String> blockapppacks2) {
		for(String blockapp :blockapppacks2 ){
			LockAppInfo info = new LockAppInfo();
			info.setPackname(blockapp);
			info.setFlagcanstart(false);
			blockappinfos.add(info);
		}
	}
パスワードを一致させる
	public void entry(View view){
		System.out.println("123");
		String password = et_password.getText().toString();	
		String pwd = sp.getString("lock_app_pwd", "");
		Intent intent = getIntent();
		if (password.equals(pwd)){
			if(intent!=null){
				String packname =  intent.getStringExtra("packagename");
				Log.i(TAG,packname);
				iLockService.stopLockAppFlag(packname);
			}
			finish();
		}
	}
パスワード入力時に後退キーを遮断する
	//         
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}