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

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

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

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;
	
	@Override
	protected 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);
		
	}
	@Override
	public 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);
			//遍历 输出解析好的xml
			for (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并插入到手机短信中就完成了。 

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值