[mobilesafe] 10_黑名单功能

Android 4.0

黑名单功能

步骤:
1、定义黑名单添加界面:CallSmsSafeActivity.java 电话短信防卫,复写onCreate()方法
2、在清单文件中进行CallSmsSa feActivity配置
3、定义CallSmsSafeActivity布局文件activity_callsms_safe.xml
4、由于黑名单可能很多,所以创建数据库blacklist来保存黑名单
所以,创建一个android.database.sqlite.SQLiteOpenHelper来初始化数据库
创建表:
create table blacknumber 
(
  id integer  primary key autoincrement, --id主键,唯一标识
  numbervarchar(20), --要加入黑名单的号码
  mode varchar(2) --1 电话拦截 2短信拦截 3全部拦截
)
5、在dao层,创建一个对黑名单数据库blacklist来进行增删改查
6、测试数据库是否可以创建
7、最后在 CallSmsSafeActivity中设置黑名单的数据适配器
核心代码:
1、 BlackNumberDBOpenHelper.java 创建黑名单数据库
package cn.zengfansheng.mobilesafe.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class BlackNumberDBOpenHelper extends SQLiteOpenHelper {
 
    public BlackNumberDBOpenHelper(Context context) {
        super(context, "blacklist.db", null, 1);
    }
 
    // 数据库第一次被创建的时候 表结构的初始化
    // mode 1 电话拦截 2短信拦截 3全部拦截
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表
        String sql = "create table blacknumber (id integer primary key autoincrement,number varchar(20), mode varchar(2))";
        // 注意,创建主键的时候:主键自动增长,是autoincrement,而不是auto_increment。要放在主键属性声明的最后面。
        db.execSQL(sql);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}
2、 BlackNumberDao.java 访问数据库,对黑名单数据库进行增删改查
package cn.zengfansheng.mobilesafe.db.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import cn.zengfansheng.mobilesafe.db.BlackNumberDBOpenHelper;
import cn.zengfansheng.mobilesafe.domain.BlackNumberInfo;
/**
 * 3、黑名单DAO
 * @author hacket
 */
public class BlackNumberDao {
    private BlackNumberDBOpenHelper helper;
    private final String TABLE = "blacknumber";
    public BlackNumberDao(Context context) {
        helper = new BlackNumberDBOpenHelper(context);
    }
    /**
     * 1、往数据库中插入黑名单
     * 
     * @param number  要插入的黑名单号码
     * @param mode  模式,1为电话,2为短信,3为全部
     * @return  返回插入到数据库哪一行,
     */
    public long add(String number, String mode) {
        // 1、获取数据库
        SQLiteDatabase database = helper.getWritableDatabase();
        // 2、插入数据到数据库
        ContentValues values = new ContentValues();
        values.put("number", number);
        values.put("mode", mode);
        long insert = database.insert(TABLEnull, values);// 返回插入数据的行号
        // 3、关闭数据库
        database.close();
        return insert;
    }
    /**
     * 2、从数据库中删除黑名单
     * @param number 要删除的黑名单号码
     * @return 返回受影响的行数
     */
    public long delete(String number) {
        SQLiteDatabase database = helper.getWritableDatabase();
        int delete = database.delete(TABLE"number=?"new String[]{number});
        database.close();
        return delete;
    }
    /**
     * 3、修改数据库中黑名单的信息 
     * @param number 要修改的黑名单号码
     * @param newMode 修改成新的模式
     * @return 返回受影响的行
     */
    public long update(String number,String newMode) {
        SQLiteDatabase database = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("number", number);
        values.put("mode", newMode);
        int update = database.update(TABLE, values, "number=?"new String[] {number});
        database.close();
        return update;
    }
    /**
     * 4、从数据库中查询所有黑名单信息
     * @param number 要查询的黑名单号码
     * @return  如果查询有记录,返回BlackNumberInfo,否则返回null。 
     */
    public BlackNumberInfo find (String number){
        SQLiteDatabase database = helper.getReadableDatabase();
        Cursor cursor = database.query(TABLEnull"number=?"new String[]{number}, nullnullnull);
        BlackNumberInfo blackNumberInfo = null;
        if (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String mynumber = cursor.getString(cursor.getColumnIndex("number"));
            String mode = cursor.getString(cursor.getColumnIndex("mode"));
            blackNumberInfo = new BlackNumberInfo(id, mynumber, mode);
        }
        return blackNumberInfo;
    }
    
    /**
     * 5、从数据库中查询所有黑名单信息
     * @return 返回所有查询到的黑名单信息
     */
    public List<BlackNumberInfo> getBlackNumberInfos() {
        
        List<BlackNumberInfo> numberInfos = new ArrayList<BlackNumberInfo>();
        
        SQLiteDatabase database = helper.getReadableDatabase();
        Cursor cursor = database.query(TABLEnullnullnullnullnullnull);
        
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String number = cursor.getString(cursor.getColumnIndex("number"));
            String mode = cursor.getString(cursor.getColumnIndex("mode"));
            BlackNumberInfo blackNumberInfo = new BlackNumberInfo(id,number,mode);
            numberInfos.add(blackNumberInfo);
        }
        return numberInfos;
    }
}
3、 CallSmsSafeActivity.java 设置黑名单数据到界面展示
package cn.zengfansheng.mobilesafe;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import cn.zengfansheng.mobilesafe.db.dao.BlackNumberDao;
import cn.zengfansheng.mobilesafe.domain.BlackNumberInfo;
 
/**
* 15、电话短信安全防卫功能Activity
* @author hacket
*/

public class CallSmsSafeActivity extends Activity {
 
    private ListView lv_callsmssafe;// 显示listview的adapter
    private BlackNumberDao blackNumberDao;// 黑名单的dao
    private List<BlackNumberInfo> numberInfos;// 存着所有的黑名单信息的List
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_callsms_safe);
 
        blackNumberDao = new BlackNumberDao(this);
        numberInfos = blackNumberDao.getBlackNumberInfos();
 
        lv_callsmssafe = (ListView) this.findViewById(R.id.lv_callsmssafe_activity);
        lv_callsmssafe.setAdapter(new MyListViewAdapter());
    }
    /**
     * 1、添加黑名单
     * @param view
     */

    public void add_blacklist(View view){
    }
    /**
     * 2、黑名单显示ListView的Adapter适配器
     * @author hacket
     */

    private class MyListViewAdapter extends BaseAdapter {
 
        @Override
        public int getCount() {
            if (numberInfos!=null) {
                return numberInfos.size();
            }
            return 0;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
 
            // 1、转换xml为view对象
            View view = View.inflate(getApplicationContext(), R.layout.listview_callsms_activity_item, null);
 
            // 2、通过view找到里面的组件
            TextView tv_number = (TextView) view.findViewById(R.id.tv_listitem_blacknumber);
            TextView tv_mode = (TextView) view.findViewById(R.id.tv_listitem_blackmode);
 
            // 3、获取对应位置的BlackNumberInfo对象
            BlackNumberInfo blackNumberInfo = numberInfos.get(position);
 
            // 4、设置数据
            tv_number.setText(blackNumberInfo.getNumber());
            String mode = blackNumberInfo.getMode();
            if ("1".equals(mode)) {
                mode = "电话拦截";
            } else if ("2".equals(mode)) {
                mode = "短信拦截";
            } else if ("3".equals(mode)) {
                mode = "全部拦截(电话拦截+短信拦截)";
            }
            tv_mode.setText(mode);
 
            // 5、返回view对象,一定要返回
            return view;
        }
 
        @Override
        public Object getItem(int position) {
            return null;
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
    }
}
界面展示: