项目地址 https://github.com/OOCZC/Android_SpamMess
首先在AndroidManifest.xml 的manifest标签下添加权限。
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
通过短信数据库读取所有短信
private Uri SMS_INBOX = Uri.parse(
"content://sms/");
public void getSmsFromPhone() {
ContentResolver cr = getContentResolver();
String[] projection =
new String[] {
"_id",
"address",
"person",
"body",
"date",
"type" };
Cursor cur = cr.query(SMS_INBOX, projection,
null,
null,
"date desc");
if (
null == cur) {
Log.i(
"ooc",
"************cur == null");
return;
}
while(cur.moveToNext()) {
String number = cur.getString(cur.getColumnIndex(
"address"));
String name = cur.getString(cur.getColumnIndex(
"person"));
String body = cur.getString(cur.getColumnIndex(
"body"));
Map<String,Object> map =
new HashMap<String,Object>();
map.put(
"num",number);
map.put(
"mess",body);
list.add(map);
}
}
也可获得短信的其他属性,如下。
String number = cur.getString(cur.getColumnIndex(
"想获得的属性"));
sms主要结构:
_id:短信序号,如
100
thread_id:对话的序号,如
100,与同一个手机号互发的短信,其序号是相同的
address:发件人地址,即手机号,如+
8613811810000
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为
null
date:日期,
long型,如
1256539465022,可以对日期显示格式进行设置
protocol:协议
0SMS_RPOTO短信,
1MMS_PROTO彩信
read:是否阅读
0未读,
1已读
status:短信状态-
1接收,
0complete,
64pending,
128failed
type:短信类型
1是接收到的,
2是已发出
body:短信具体内容
service_center:短信服务中心号码编号,如+
8613800755500