读书人

Android项目实战-手机卫士24-程序锁的

发布时间: 2013-10-12 11:54:02 作者: rapoo

Android项目实战--手机卫士24--程序锁的实现以及逻辑

昨天我们已经把程序全部读取出来,显示到界面上了,那今天,我们就来讲一下那个程序锁的实现啦。其实也很简单啦,我们主要就是把用户要锁定的程序放到一个表里面,然后就监听手机里面的任务栈,如果发现任务栈里面出现了,数据库里面的应用,那么就提示用户要输入密码才能打开,就是这样一个简单的流程。

按照这个流程,那样我们肯定是先建一张表的啦,那样肯定是继承Android的SQLiteOpenHelper,然后在它的onCreate方法里面写建表语句这些的啦,如果是单独的应用,那肯定没错的,但是现在在我们的这个项目里面,那就不行了,因为我们的项目里面已经有一个数据库了,那么我们在新增表,这些操作的时候,就要特别小心啦。

当时我们写我们的黑名单的数据库的时候,是看到这样一个方法的onUpgrade,这个方法就是在当数据库版本不同的时候执行的操作,那么在那里控制那个版本呢,那就是在构造方法里面的最后一个参数啦,那个就是控制数据库的版本的了,那么现在,我们就有一个解决办法了,我们只在把表的创建语句写在onUpgrade里面,然后修改一下数据库的版本号就可以啦!

好,那我们就来写一下

com.xiaobin.security.utils.DBHelper

package com.xiaobin.security.ui;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import com.xiaobin.security.R;import com.xiaobin.security.dao.AppLockDao;import com.xiaobin.security.domain.AppInfo;import com.xiaobin.security.engine.AppInfoProvider;public class AppLockActivity extends Activity{private ListView lv_app_lock;private LinearLayout ll_load;private AppLockAdapter adapter;private List<AppInfo> list;private AppInfoProvider provider;private AppLockDao dao;private List<String> lockApps;@SuppressLint("HandlerLeak")private Handler handler = new Handler(){public void handleMessage(Message msg) {ll_load.setVisibility(View.GONE);adapter = new AppLockAdapter();lv_app_lock.setAdapter(adapter);}};@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.app_lock);ll_load = (LinearLayout) findViewById(R.id.ll_app_lock_progress);dao = new AppLockDao(this);lockApps = new ArrayList<String>();lv_app_lock = (ListView) findViewById(R.id.lv_app_lock);lv_app_lock.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id){//添加动画效果,动画结束后,就把锁的图片改变TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);translateAnimation.setDuration(300);view.startAnimation(translateAnimation);AppInfo info = list.get(position);String packageName = info.getPackageName();ImageView iv_lock = (ImageView) view.findViewById(R.id.iv_app_lock);if(dao.find(packageName)){dao.delete(packageName);lockApps.remove(packageName);iv_lock.setImageResource(R.drawable.unlock);}else{dao.add(info.getPackageName());lockApps.add(packageName);iv_lock.setImageResource(R.drawable.lock);}}});provider = new AppInfoProvider(this);initAppInfos();}private void initAppInfos(){ll_load.setVisibility(View.VISIBLE);new Thread(){@Overridepublic void run(){list = provider.getAllApps();handler.sendEmptyMessage(0);}}.start();}//===========================================================================private class AppLockAdapter extends BaseAdapter{@Overridepublic int getCount(){return list.size();}@Overridepublic Object getItem(int position){return list.get(position);}@Overridepublic long getItemId(int position){return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent){AppInfo info = list.get(position);if(convertView == null){View view = View.inflate(AppLockActivity.this, R.layout.app_lock_item, null);AppManagerViews views = new AppManagerViews();views.iv_app_icon = (ImageView) view.findViewById(R.id.iv_app_lock_icon);views.tv_app_name = (TextView) view.findViewById(R.id.tv_app_lock_name);views.iv_app_lock = (ImageView) view.findViewById(R.id.iv_app_lock);views.iv_app_icon.setImageDrawable(info.getIcon());views.tv_app_name.setText(info.getAppName());if(lockApps.contains(info.getPackageName())){views.iv_app_lock.setImageResource(R.drawable.lock);}else{views.iv_app_lock.setImageResource(R.drawable.unlock);}view.setTag(views);return view;}else{AppManagerViews views = (AppManagerViews) convertView.getTag();views.iv_app_icon.setImageDrawable(info.getIcon());views.tv_app_name.setText(info.getAppName());if(lockApps.contains(info.getPackageName())){views.iv_app_lock.setImageResource(R.drawable.lock);}else{views.iv_app_lock.setImageResource(R.drawable.unlock);}return convertView;}}}//用来优化listview的类private class AppManagerViews{ImageView iv_app_icon;TextView tv_app_name;ImageView iv_app_lock;}}

好啦,今天我们就讲到这里,我们明天就会讲程序锁里面最重要的一总分,监听任务栈


最后,和大家说一下

为了方便大家的交流,我创建了一个群,这样子大家有什么疑问也可以在群上交流

群号是298440981



今天源码下载



读书人网 >Android

热点推荐