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并插入到手机短信中就完成了。
- android解析xml文件,并写入到短信中
- Android解析XML文件到Spinner中
- DOM解析XML文件并添加到数据库中
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
- 【Python小工具】Python实现批量解析PDF文件提取内容并写入到Excel中
- java 取到xml文件,并解析
- android 异步写入日志到文件中
- Android写入文件到sdcard中
- Android HTTP下载XML文件并解析
- VC++中XML文件的解析读取写入
- 在iOS中 XML文件的解析和写入
- android中解析XML文件
- Android中XML文件解析
- 读取文件并写入到编辑框中
- 导入excel格式的文件并写入到数据库中
- 统计系统的登录信息 并写入到文件中
- 读取word模板,并写入数据到word文件中
- Java从键盘录入并写入到文件中
- 《转》《招聘一个靠谱的 iOS》—参考答案(下)
- freeswitch注册超时机制
- windows下面常用的渗透测试命令(安全工具)
- 小解差速齿轮
- 递归调用获取某个文件夹中的所有的文件名称
- android解析xml文件,并写入到短信中
- R::shiny 点击事件-Demo
- HDU 1695 GCD ( 容斥 + 欧拉 )
- OpenCV中的数据结构
- 如何通过JS得到访问者的IP
- 单例的两种写法
- 牛人推荐机器学习网站
- ListView三层嵌套
- Farey序列(Stern-Brocot tree的衍生)