短信拦截器
最后更新于:2022-04-01 14:43:30
今天用了几个小时做的小应用,一个短信拦截器,标记黑名单什么的。做这货的主要原因是为了巩固下前面的知识,这货用了数据库,listview,activity跳转,brocastcast receiver等知识。代码写得不好看看就行了。
~~~
package com.example.duanxinlanjie;
import java.util.Vector;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText set_num;
private EditText clear_num;
private Button set_bt;
private Button clear_bt;
private Button exit_app;
private Button find_num;
private ListView lv;
private SQLiteDatabase db;
private MyAdapter myAdapter;
private Vector<String> sender;
private Vector<String> message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
set_num = (EditText) findViewById(R.id.set_num);
clear_num = (EditText) findViewById(R.id.clear_num);
set_bt = (Button) findViewById(R.id.set_bt);
clear_bt = (Button) findViewById(R.id.clear_bt);
lv = (ListView) findViewById(R.id.lv);
exit_app = (Button) findViewById(R.id.exit_app);
find_num = (Button) findViewById(R.id.find_num);
sender = new Vector<String>();
message = new Vector<String>();
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this);
db = helper.getWritableDatabase();
getData();
myAdapter = new MyAdapter();
lv.setAdapter(myAdapter);
set_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num = set_num.getText().toString();
// 数据表phone_num插入一个待拦截的电话号码
db.execSQL("insert into num_data (phone_num) values (?)",
new Object[] { num });
Toast.makeText(MainActivity.this, "成功输入号码", 0).show();
}
});
clear_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num = clear_num.getText().toString();
// 数据表phone_num插入一个待拦截的电话号码
db.execSQL("delete from num_data where phone_num = ?",
new Object[] { num });
Toast.makeText(MainActivity.this, "成功删除号码", 0).show();
}
});
exit_app.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
find_num.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(MainActivity.this, FindNum.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
db.close();
}
private void getData() {
Cursor cursor = db.rawQuery("select * from msg_data", null);
while (cursor.moveToNext() == true) {
String s = cursor.getString(1);
String m = cursor.getString(2);
sender.add(s);
message.add(m);
}
cursor.close();
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
int count = sender.size();
return count;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
String senderInView = (String) sender.elementAt(position);
String messageInView = (String) message.elementAt(position);
View v = View.inflate(MainActivity.this, R.layout.lv_item, null);
TextView tv_num = (TextView) v.findViewById(R.id.tv_num);
TextView tv_content = (TextView) v.findViewById(R.id.tv_content);
tv_num.setText(senderInView);
tv_content.setText(messageInView);
return v;
}
}
}
~~~
~~~
package com.example.duanxinlanjie;
import java.util.Vector;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class FindNum extends Activity {
private Vector<String> num;
private ListView num_list;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.find_num);
num = new Vector<String>();
num_list = (ListView) findViewById(R.id.num_list);
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this);
db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from num_data", null);
while (cursor.moveToNext()) {
String n = cursor.getString(1);
num.add(n);
}
cursor.close();
db.close();
num_list.setAdapter(new ArrayAdapter<String>(this, R.layout.num_item,
R.id.num_text, num));
}
}
~~~
~~~
package com.example.duanxinlanjie;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context) {
super(context, "phone_data.db", null, 1);
// TODO Auto-generated constructor stub
}
/**
* 建立两份表,第一份表是存要拦截的号码,第二份表存的是已经拦截的号码和短信内容
*/
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table num_data(id integer primary key autoincrement, phone_num varchar(20))");
db.execSQL("create table msg_data(id integer primary key autoincrement, phone_num varchar(20), msg varchar(100))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
~~~
~~~
package com.example.duanxinlanjie;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.telephony.gsm.SmsMessage;
import android.widget.Toast;
public class SmsReceiver extends BroadcastReceiver {
private MySQLiteOpenHelper helper;
private SQLiteDatabase db;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
helper = new MySQLiteOpenHelper(context);
db = helper.getWritableDatabase();
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for (Object pdu : pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
String body = smsMessage.getMessageBody();
String sender = smsMessage.getDisplayOriginatingAddress();
Cursor cursor = db.rawQuery(
"select * from num_data where phone_num = ?",
new String[] { sender });
if (cursor.getCount() == 0) {
cursor.close();
helper = null;
db.close();
return;
}
cursor.close();
db.execSQL("insert into msg_data (phone_num , msg) values (?,?)",
new Object[] { sender, body });
db.close();
helper = null;
}
Toast.makeText(context, "成功拦截", 0).show();
abortBroadcast();
}
}
~~~
~~~
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text="标记号码: "
android:textSize="20dp" />
<EditText
android:id="@+id/set_num"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_marginLeft="20dp"
android:layout_weight="7.69" />
<Button
android:id="@+id/set_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="确认" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text="清除号码: "
android:textSize="20dp" />
<EditText
android:id="@+id/clear_num"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_marginLeft="20dp"
android:layout_weight="7.69" />
<Button
android:id="@+id/clear_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="确认" />
</LinearLayout>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="10"
android:layout_marginTop="10dp" >
</ListView>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_weight="0"
android:orientation="horizontal" >
<Button
android:id="@+id/exit_app"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="退出程序"
android:layout_alignParentRight="true"
android:layout_marginRight="50dp" />
<Button
android:id="@+id/find_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拦截号码"
android:layout_alignParentLeft="true"
android:layout_marginLeft="50dp" />
</RelativeLayout>
</LinearLayout>
~~~
~~~
<?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" >
<ListView
android:id="@+id/num_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
></ListView>
</LinearLayout>
~~~
~~~
<?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" >
<TextView
android:id="@+id/tv_num"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18dp"
android:text="电话号码" />
<TextView
android:id="@+id/tv_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="18dp"
android:text="短信内容" />
</LinearLayout>
~~~
~~~
<?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" >
<TextView
android:id="@+id/num_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="号码"
/>
</LinearLayout>
~~~
~~~
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.duanxinlanjie"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/wuya"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:logo="@drawable/wuya" >
<activity
android:name="com.example.duanxinlanjie.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>
<activity android:name=".MySQLiteOpenHelper" >
</activity>
<receiver android:name="com.example.duanxinlanjie.SmsReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<activity android:name="com.example.duanxinlanjie.FindNum" >
</activity>
</application>
</manifest>
~~~