因为短信的内容已经通过ContentProvider暴露出来,所以我们可以直接用内容解析者获取短信内容。
想要获取短信内容,你需要知道的一些东西:
1、Uri uri = Uri.parse("content://sms/");
2、Cursor cursor = getContentResolver().query(uri,new String[]{"address","date","body"},null,null,null);
知道了这个就好获取短信的相关信息了
先看代码吧:
1 public void onClick(View v) { 2 XmlSerializer serializer = Xml.newSerializer(); 3 File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml"); 4 try { 5 FileOutputStream outputStream = new FileOutputStream(file); 6 serializer.setOutput(outputStream, "utf-8"); 7 serializer.startDocument("utf-8",true); 8 serializer.startTag(null,"smss"); 9 10 Uri uri = Uri.parse("content://sms/");11 Cursor cursor = getContentResolver().query(uri,new String[]{"address","date","body"},null,null,null);12 if (cursor!=null){13 while (cursor.moveToNext()){14 String address = cursor.getString(0);15 String date = cursor.getString(1);16 String body = cursor.getString(2);17 18 try {19 //sms节点20 serializer.startTag(null,"sms");21 //address节点22 serializer.startTag(null,"address");23 serializer.text(address);24 serializer.endTag(null,"address");25 //date节点26 serializer.startTag(null,"date");27 serializer.text(date);28 serializer.endTag(null,"date");29 //body节点30 serializer.startTag(null,"body");31 serializer.text(body);32 serializer.endTag(null,"body");33 34 serializer.endTag(null,"sms");35 36 } catch (IOException e) {37 e.printStackTrace();38 }39 System.out.println(address+"---"+date+"---"+body);40 }41 }42 serializer.endTag(null,"smss");43 serializer.endDocument();44 outputStream.close();45 } catch (FileNotFoundException e) {46 e.printStackTrace();47 } catch (IOException e) {48 e.printStackTrace();49 }50 51 }
主要用内容解析者获取短信的信息和内容,然后用XmlSerializer存储。
下面是Manifest.xml:需要加上这三个权限
12 3