android解析xml文件,并写入到短信中

来源:互联网 发布:适合做网络推广的行业 编辑:程序博客网 时间:2024/05/12 11:06

首先,如要将信息插入到手机短信中去,要先知道短信在数据库中字段的形式。

数据库中短信的相关字段如下:

address:  发件人手机号码

date:         发件日期

protocol:  协议,分为:0  短信; 1 彩信

read:        是否阅读        0  未读; 1 已读

type:          ALL    = 0;  

INBOX  = 1;                收件箱  

SENT   = 2;                已发送  

DRAFT  = 3;               草稿

OUTBOX = 4;             发件箱  

FAILED = 5;                发送失败 

QUEUED = 6;         待发送列表     

body:        短信内容

在这自己只获取了这6个字段,其他字段例如service_center:短信服务中心号码编号,subject:短信主体等字段如有需要可自行添加。

然后我们写一个包含两个Button的xml文件:

<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" >    <Button         android:id="@+id/smsRead"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="解析短信xml"/>    <Button         android:id="@+id/smsWrite"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="写入短信"/>    </LinearLayout>

在这里别忘了在AndroidMainFest加上写入短信的权限:<uses-permission android:name="android.permission.WRITE_SMS" />

我解析的是一个简单的xml文件,再将xml文件放在assets文件下,若要从其他地方获取xml文件,修改路径即可,以下是xml文件的格式:

<pre name="code" class="plain"><?xml version='1.0' encoding='utf-8' standalone='yes' ?><sms><item><person>张三</person><address>123456789</address><date>2015-07-30 10:18:59</date><protocol>短信</protocol><read>已读</read><type>已发送</type><body>我过会儿打给您。</body></item><item><person>李四</person><address>987654321</address><date>2015-07-30 10:18:59</date><protocol>短信</protocol><read>已读</read><type>收件箱</type><body>王婆卖瓜,自卖自夸</body></item></sms>

首先,我们解析xml文件,自己采用的是pull解析,xml的解析方式有SAX解析,DOM解析,PULL解析三种方式,可自行选择适合自己的方式进行解析。在这里,我们定义一个PullMsgParser类来作为我们解析xml的工具,一个MsgBean用来保存字段,里面有name,phone,time,protocol,read,type,body六个属性,在这就不贴代码了

<pre name="code" class="java">public class PullMsgParser {private MsgBean msg;private List<MsgBean> msgs;public List<MsgBean> parse(InputStream is) throws Exception {XmlPullParser parser = Xml.newPullParser();parser.setInput(is, "UTF-8");int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:msgs = new ArrayList<MsgBean>();break;case XmlPullParser.START_TAG:if (parser.getName().equals("item")) {//单例模式只初始化一次msg = getInstance(); } else if (parser.getName().equals("person")) {eventType = parser.next();msg.setName(parser.getText());} else if (parser.getName().equals("address")) {eventType = parser.next();msg.setPhone(parser.getText());} else if (parser.getName().equals("date")) {eventType = parser.next();msg.setTime(parser.getText());} else if (parser.getName().equals("protocol")) {eventType = parser.next();msg.setProtocol(parser.getText());} else if (parser.getName().equals("read")) {eventType = parser.next();msg.setRead(parser.getText());} else if (parser.getName().equals("type")) {eventType = parser.next();msg.setType(parser.getText());} else if (parser.getName().equals("body")) {eventType = parser.next();msg.setBody(parser.getText());}break;case XmlPullParser.END_TAG:if (parser.getName().equals("item")) {msgs.add(msg);msg = null;}break;}eventType = parser.next();}return msgs;}/** * 只初始化一次 *  * @return */MsgBean getInstance() {if (msg == null) {msg = new MsgBean();}return msg;}}


接下来就剩下把解析的xml数据插入到手机中去了:

public class MainActivity extends Activity implements OnClickListener{//数据库表的地址public static Uri mSmsUri = Uri.parse("content://sms/inbox");private PullMsgParser parser;private List<MsgBean> msgs;private Button readSms;private Button writeSms;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}/* * 初始化控件 * */private void initView() {readSms = (Button) findViewById(R.id.smsRead);writeSms = (Button) findViewById(R.id.smsWrite);readSms.setOnClickListener(this);writeSms.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.smsRead:readSmsXml();break;case R.id.smsWrite:writeSms();break;default:break;}}private void writeSms() {if(msgs != null){for (MsgBean msg : msgs) {try {//将xml数据写入到短信数据库msgInsert(msg.getPhone(), msg.getBody(),msg.getTime(), msg.getRead(), msg.getType(),msg.getProtocol());} catch (ParseException e) {e.printStackTrace();}}}else{Toast.makeText(this, "请先解析xml文件", Toast.LENGTH_SHORT).show();}}private void readSmsXml() {try {//获取assets文件下的xml文件InputStream is = getAssets().open("sms.xml");//初始化parser = new PullMsgParser();//解析xml文件msgs = parser.parse(is);//遍历 输出解析好的xmlfor (MsgBean msg : msgs) {System.out.println(msg.SysMsg());}} catch (Exception e) {e.printStackTrace();}}protected void msgInsert(String phone, String body, String time,String read, String type, String protocal) throws ParseException {ContentValues values = new ContentValues();values.put("address", phone);values.put("body", body);//时间类型转换成long型SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date dt = sdf.parse(time);long lTime = dt.getTime();values.put("date", lTime);if (read.equals("未读")) {values.put("read", 0);} else if (read.equals("已读")) {values.put("read", 1);}if (type.equals("收件箱")) {values.put("type", 1);} else if (type.equals("已发送")) {values.put("type", 2);} else if(read.equals("草稿")){values.put("type", 3);} else if(read.equals("发送中")){values.put("type", 4);} else if(read.equals("失败")){values.put("type", 5);} else if(read.equals("待发送")){values.put("type", 6);} else{values.put("type", 0);}if (protocal.equals("短信")) {values.put("protocol", 0);} else if (protocal.equals("彩信")) {values.put("protocol", 1);}getContentResolver().insert(mSmsUri, values);}}


这样,解析xml并插入到手机短信中就完成了。 

       

0 0
原创粉丝点击