Android開發簡訊備份小例子
主要是使用內容提供者ContentProvider
#1.在activity_main.xml布局檔案中添加寫sdcard許可權,並添加讀簡訊的許可權
#2.MainActivity中內容如下
package com.wzw.backupsms;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlSerializer;import com.wzw.backupsms.entity.SmsInfo;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.util.Log;import android.util.Xml;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void backupsms(View v){Uri uri=Uri.parse(content://sms/);ContentResolver resolver = getContentResolver();Cursor cursor = resolver.query(uri, new String[]{_id,address,date,type,body}, null, null, null);if(cursor!=null&&cursor.getCount()>0){List smsList=new ArrayList();SmsInfo smsInfo;while(cursor.moveToNext()){//控制遊標指標,向下移一位smsInfo=new SmsInfo();smsInfo.setId(cursor.getInt(0));//設定IDsmsInfo.setAddress(cursor.getString(1));//設定簡訊號碼smsInfo.setDate(cursor.getLong(2));//設定簡訊時間smsInfo.setType(cursor.getInt(3));//設定簡訊類型smsInfo.setBody(cursor.getString(4));//設定簡訊內容smsList.add(smsInfo);}cursor.close();WriteToLocal(smsList);}}/** * 序列化到本地 */private void WriteToLocal(List smsList){XmlSerializer serializer=Xml.newSerializer();try {FileOutputStream fos=new FileOutputStream(/mnt/sdcard/sms.xml);serializer.setOutput(fos, utf-8);serializer.startDocument(utf-8, true);serializer.startTag(null, smss);for (SmsInfo smsInfo : smsList) {serializer.startTag(null, sms);serializer.attribute(null, id,String.valueOf(smsInfo.getId()));//寫地址serializer.startTag(null, address);serializer.text(smsInfo.getAddress());serializer.endTag(null, address);//寫類型serializer.startTag(null, type);serializer.text(String.valueOf(smsInfo.getType()));serializer.endTag(null, type);//寫時間serializer.startTag(null, date);serializer.text(String.valueOf(smsInfo.getDate()));serializer.endTag(null, date);//寫內容serializer.startTag(null, body);serializer.text(smsInfo.getBody());serializer.endTag(null, body);serializer.endTag(null, sms);}serializer.endTag(null, smss);serializer.endDocument();Toast.makeText(this, 恭喜你,備份成功!, 0).show();} catch (Exception e) {Toast.makeText(this, 我去,備份失敗!, 0).show();e.printStackTrace();}}}
#3.寫入的結果
1008611406446124317just for test!11011406446024971world555611406446006018hello