練手小項目(4)安全衛士——黑名單攔截,練手安全衛士

來源:互聯網
上載者:User

練手小項目(4)安全衛士——黑名單攔截,練手安全衛士

我一直在想用什麼能把安卓所有知識點,複習完,它,就是它,手機安全衛士,幾乎包括所有知識點,我最近也想高仿一個款外國的工具箱玩玩,So,順便寫一寫筆記吧。

 最後的高仿的工具箱我也會開源在github.....不扯淡了~~~開搞。

我的思路永遠是從布局開始,因為你要想一般使用者會怎麼使用,你或者你也可以參考別人已經做好的東西。

別懷疑 上面的標題,因為這是我的一個測試Demo。

主介面是一個標題列 添加能輸入號碼 和選擇模式 電話攔截和簡訊攔截  最近被別人鄙視,說My Code風格差,所以這一篇文章會用到註解......

首先我們要一個東西儲存資料,我也是順便拿資料庫來練習下,不過大多數安全衛士,都是內建一個資料去查詢,比如廣告簡訊,詐騙電話都會去資料庫去遍曆,然後得到查詢結果。

BlackNumSearchDao.java協助類


package com.example.Darkbutton.BlackNumSerach;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class BlackNumSearchDao extends SQLiteOpenHelper {public BlackNumSearchDao(Context context) {//   上下文 資料庫名版本super(context, "blacknumber.db", null, 1);}// 初始化資料庫的表結構@Overridepublic void onCreate(SQLiteDatabase db) {// 建立     表名 blacknumber   id 自增長20個位元組的號碼模式 2位元組db.execSQL("create table blacknumber(_id integer primary key autoincrement,number varchar(20),mode varchar(2))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}


資料庫類 主要存放一些資料庫語句,比如查詢,添加,刪除,查詢

package com.example.Darkbutton.BlackNumSerach;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;public class BlackNumberDao {private BlackNumSearchDao helper;public BlackNumberDao(Context context) {helper=new BlackNumSearchDao(context);}/** * 查詢黑名單號碼是是否存在 * @param number * @return */public boolean find(String number){boolean result = false;SQLiteDatabase db = helper.getReadableDatabase();//where 之後的語句是用來做篩選的條件 查詢表明 blacknumber 的某一個號碼Cursor cursor=db.rawQuery("select * from blacknumber where number=?", new String []{number});if (cursor.moveToNext()) {result=true;}cursor.close();db.close();return result;}/** * 查詢黑名單號碼的攔截模式 * @param number * @return 返回號碼的攔截模式,不是黑名單號碼返回null */public String findMode(String number){String result=null;SQLiteDatabase db = helper.getReadableDatabase();//查詢?號碼的modeCursor cursor = db.rawQuery("select mode from blacknumber where number=?", new String []{number});if (cursor.moveToNext()) {result=cursor.getString(0);}cursor.close();db.close();return result;}/** * 查詢全部黑名單號碼 * @return */public List<BlackNumberInfo> findAll(){List<BlackNumberInfo> result = new ArrayList<BlackNumberInfo>();SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.rawQuery("select number,mode from blacknumber order by _id desc", null);while(cursor.moveToNext()){BlackNumberInfo info = new BlackNumberInfo();String number = cursor.getString(0);String mode = cursor.getString(1);info.setMode(mode);info.setNumber(number);result.add(info);}cursor.close();db.close();return result;}/** * 添加黑名單號碼 * @param number 黑名單號碼 * @param mode 攔截模式 1.電話攔截 2.簡訊攔截 3.全部攔截 */public void add(String number,String mode){SQLiteDatabase db = helper.getWritableDatabase();ContentValues values=new ContentValues();values.put("number", number);values.put("mode", mode);db.insert("blacknumber", null, values);db.close();}/** * 修改黑名單號碼的攔截模式 * @param number 要修改的黑名單號碼 * @param newmode 新的攔截模式 */public void update(String number,String newmode){SQLiteDatabase db = helper.getWritableDatabase();ContentValues values=new ContentValues();values.put("mode", newmode);//表名為blacknumber db.update("blacknumber", values, "number=?", new String []{number});db.close();}/** * 刪除黑名單號碼 * @param number 要刪除的黑名單號碼 */public void delete(String number){SQLiteDatabase db = helper.getWritableDatabase();db.delete("blacknumber",  "number=?", new String[]{number});db.close();}}

看上面我們建立了一個實體類進行儲存,方便使用

package com.example.Darkbutton.BlackNumSerach;/** * 黑名單號碼的業務bean * @author Administrator * */public class BlackNumberInfo {private String number;private String mode;public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getMode() {return mode;}public void setMode(String mode) {this.mode = mode;}@Overridepublic String toString() {return "BlackNumberInfo [number=" + number + ", mode=" + mode + "]";}}


主類,我要對listview 進行初始化,還有button點擊出現的AlertDialog 進行處理


package com.example.Darkbutton.BlackNumSerach;import java.util.List;import com.example.Darkbutton.R;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.view.annotation.ViewInject;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class BlackNumSerach extends Activity {private BlackNumberDao dao;private List<BlackNumberInfo> infos;private CallSmsSafeAdapter adapter;@ViewInject(R.id.textView1)TextView textView;@ViewInject(R.id.lv_callsms_safe)ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_call_sms_safe);ViewUtils.inject(BlackNumSerach.this);dao=new BlackNumberDao(this);infos = dao.findAll();adapter = new CallSmsSafeAdapter();listView.setAdapter(adapter);}private class CallSmsSafeAdapter extends BaseAdapter{@Overridepublic int getCount() {return infos.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {View view;ViewHolder holder;//1.減少記憶體中view對象建立的個數if(convertView==null){//把一個布局檔案轉化成  view對象。view  = View.inflate(getApplicationContext(), R.layout.list_item_callsms, null);//2.減少子孩子查詢的次數  記憶體中對象的地址。holder = new ViewHolder();holder.tv_number = (TextView) view.findViewById(R.id.tv_black_number);holder.tv_mode = (TextView) view.findViewById(R.id.tv_block_mode);holder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete);//當孩子生出來的時候找到他們的引用,存放在記事本,放在父親的口袋view.setTag(holder);}else{//Log.i(TAG,"廚房有曆史的view對象,複用曆史緩衝的view對象:"+position);view = convertView;holder = (ViewHolder) view.getTag();//5%}holder.tv_number.setText(infos.get(position).getNumber());String mode = infos.get(position).getMode();if("1".equals(mode)){holder.tv_mode.setText("電話攔截");}else if("2".equals(mode)){holder.tv_mode.setText("簡訊攔截");}else{holder.tv_mode.setText("全部攔截");}holder.iv_delete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {AlertDialog.Builder builder = new Builder(BlackNumSerach.this);builder.setTitle("警告");builder.setMessage("確定要刪除這條記錄嗎?");builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//刪除資料庫的內容dao.delete(infos.get(position).getNumber());//更新介面。infos.remove(position);//通知listview資料配接器更新adapter.notifyDataSetChanged();}});builder.setNegativeButton("取消", null);builder.show();}});return view;}/** * view對象的容器 *記錄孩子的記憶體位址。 *相當於一個記事本 */}static class ViewHolder{TextView tv_number;TextView tv_mode;ImageView iv_delete;}//-----------初始化快顯視窗----------------private EditText et_blacknumber;private CheckBox cb_phone;private CheckBox cb_sms;private Button bt_ok;private Button bt_cancel;public void addBlackNumber(View view){AlertDialog.Builder builder = new Builder(this);final AlertDialog dialog = builder.create();View contentView = View.inflate(this, R.layout.dialog_add_blacknumber, null);et_blacknumber = (EditText) contentView.findViewById(R.id.et_blacknumber);cb_phone = (CheckBox) contentView.findViewById(R.id.cb_phone);cb_sms = (CheckBox) contentView.findViewById(R.id.cb_sms);bt_cancel = (Button) contentView.findViewById(R.id.cancel);bt_ok = (Button) contentView.findViewById(R.id.ok);dialog.setView(contentView, 0, 0, 0, 0);dialog.show();bt_cancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss();}});bt_ok.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String blacknumber = et_blacknumber.getText().toString().trim();if(TextUtils.isEmpty(blacknumber)){Toast.makeText(getApplicationContext(), "黑名單號碼不可為空", 0).show();return;}String mode ;if(cb_phone.isChecked()&&cb_sms.isChecked()){//全部攔截    mode = "3";}else if(cb_phone.isChecked()){//電話攔截mode = "1";}else if(cb_sms.isChecked()){//簡訊攔截mode = "2";}else{Toast.makeText(getApplicationContext(), "請選擇攔截模式", 0).show();return;}//資料被加到資料庫dao.add(blacknumber, mode);//更新listview集合裡面的內容。BlackNumberInfo info = new BlackNumberInfo();info.setMode(mode);info.setNumber(blacknumber);infos.add(0, info);//通知listview資料配接器資料更新了。adapter.notifyDataSetChanged();dialog.dismiss();}});}}

下一節加入服務和廣播 進行攔截簡訊 和電話

下一篇 練手小項目(3)安全衛士——黑名單攔截,廣播和服務的加入進行攔截

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.