获取Android手机中所有短信的实现代码
程序员文章站
2022-11-05 15:04:38
java核心代码:
public string getsmsinphone()
{
final string sms_uri_all = "content...
java核心代码:
public string getsmsinphone() { final string sms_uri_all = "content://sms/"; final string sms_uri_inbox = "content://sms/inbox"; final string sms_uri_send = "content://sms/sent"; final string sms_uri_draft = "content://sms/draft"; stringbuilder smsbuilder = new stringbuilder(); try{ contentresolver cr = getcontentresolver(); string[] projection = new string[]{"_id", "address", "person", "body", "date", "type"}; uri uri = uri.parse(sms_uri_all); cursor cur = cr.query(uri, projection, null, null, "date desc"); if (cur.movetofirst()) { string name; string phonenumber; string smsbody; string date; string type; int namecolumn = cur.getcolumnindex("person"); int phonenumbercolumn = cur.getcolumnindex("address"); int smsbodycolumn = cur.getcolumnindex("body"); int datecolumn = cur.getcolumnindex("date"); int typecolumn = cur.getcolumnindex("type"); do{ name = cur.getstring(namecolumn); phonenumber = cur.getstring(phonenumbercolumn); smsbody = cur.getstring(smsbodycolumn); simpledateformat dateformat = new simpledateformat( "yyyy-mm-dd hh:mm:ss"); date d = new date(long.parselong(cur.getstring(datecolumn))); date = dateformat.format(d); int typeid = cur.getint(typecolumn); if(typeid == 1){ type = "接收"; } else if(typeid == 2){ type = "发送"; } else { type = ""; } smsbuilder.append("["); smsbuilder.append(name+","); smsbuilder.append(phonenumber+","); smsbuilder.append(smsbody+","); smsbuilder.append(date+","); smsbuilder.append(type); smsbuilder.append("] "); if(smsbody == null) smsbody = ""; }while(cur.movetonext()); } else { smsbuilder.append("no result!"); } smsbuilder.append("getsmsinphone has executed!"); } catch(sqliteexception ex) { log.d("sqliteexception in getsmsinphone", ex.getmessage()); } return smsbuilder.tostring(); }
注释:
1、本函数用于获取手机中所有的短信,包括收件箱、发件箱、草稿箱等。
2、本函数可以运行在service子类中,因为未使用activity类的相关函数。
3、获取的短信包括:收发短信人名、手机号码、短信内容、短信发送接收的时间、短信的类型。
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
4、为了获取短信,需要在androidmanifest.xml文件中添加权限使用说明,如下:
<uses-permissionandroid:name="android.permission.read_sms"/>
5、本函数在真机上测试通过。