文章出處
文章列表
因為短信的內容已經通過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:需要加上這三個權限
1 <uses-permission android:name="android.permission.READ_SMS"/> 2 <uses-permission android:name="android.permission.WRITE_SMS"/> 3 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
文章列表
全站熱搜