Androidの世界におけるプログラムロックの実現
私たちはプログラムのためにパスワードを設定した後、初めてこのプログラムに入る時にパスワードを入力してくださいとヒントを与えられます.正しいパスワードを入力してから引き続きこのプログラムにアクセスできます.もし再度このプログラムにアクセスすると、パスワードを入力するようにヒントを与えられません.これは市販のプログラムロックの実現です.
開発の考え方:
1.サービスを開始し、サービスの中でデッドサイクルを起動し、このデッドサイクルは現在アクセスしているプログラムがロックされているかどうかを確認するためのプログラムであり、そうであればパスワード入力ダイアログをポップアップする.ロックされたプログラムをデータベースで保存します.
2.パスワードはxmlに保存されていますが、パスワードが合ったらプログラム画面に入ります.
3.同じプログラムに複数回入らないようにするためにブーメラン変数を使用してパスワードダイアログを表示します.
キーコード:
コアコード
開発の考え方:
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);
}