Android中的短息备份器源码

来源:互联网 发布:新浪网的域名 编辑:程序博客网 时间:2024/05/29 04:44

短信的实体bean

package com.examp.backsms.domain;public class SmsInfo {private String address;private String date;private String type;private String body;public SmsInfo() {}public SmsInfo(String address, String date, String type, String body) {this.address = address;this.date = date;this.type = type;this.body = body;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}@Overridepublic String toString() {return "SmsInfo [address=" + address + ", date=" + date + ", type="+ type + ", body=" + body + "]";}}

核心代码

package com.examp.backsms;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.view.View;import com.examp.backsms.domain.SmsInfo;import com.examp.backsms.util.SmsUtils;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void backSms(View view) {        // 创建被叫主机名        Uri uri = Uri.parse("content://sms/");        // 获取内容解析器        ContentResolver resolver = getContentResolver();        // 执行查询,得到结果集        Cursor cursor = resolver.query(uri, new String[] { "address", "date",                "type", "body" }, null, null, null);         //创建短信的集合         List<SmsInfo> infos = new ArrayList<SmsInfo>();         //逐一添加到集合         while (cursor.moveToNext()) {            SmsInfo info = new SmsInfo();            info.setAddress(cursor.getString(cursor.getColumnIndex("address")));            info.setBody(cursor.getString(cursor.getColumnIndex("body")));            info.setDate(cursor.getString(cursor.getColumnIndex("date")));            info.setType(cursor.getString(cursor.getColumnIndex("type")));            infos.add(info);        }        //通过工具类调用备份的业务        //将集合|本活动的上下文传入         SmsUtils.backupSms(infos, this);        cursor.close();    }}


工具类

package com.examp.backsms.util;import java.io.File;import java.io.FileOutputStream;import java.util.List;import org.xmlpull.v1.XmlSerializer;import android.content.Context;import android.os.Environment;import android.util.Xml;import android.widget.Toast;import com.examp.backsms.domain.SmsInfo;public class SmsUtils {public static void backupSms(List<SmsInfo> smsInfos, Context context) {try {// 创建XML序列化器XmlSerializer serializer = Xml.newSerializer();File file = new File(Environment.getExternalStorageDirectory(),"backupSms.xml");FileOutputStream os = new FileOutputStream(file);// 初始化xml序列化器,指定xml数据写入到那个文件,并且制定文件的编码方式serializer.setOutput(os, "utf-8");// 设置<?xml version="1.0" encoding="utf-8"?>,及是否是独立的xml文件serializer.startDocument("utf-8", true);// 相当于<smss>serializer.startTag(null, "smss");for (SmsInfo info : smsInfos) {serializer.startTag(null, "sms");serializer.startTag(null, "body");serializer.text(info.getBody());serializer.endTag(null, "body");serializer.startTag(null, "type");serializer.text(info.getType() + "");serializer.endTag(null, "type");serializer.startTag(null, "address");serializer.text(info.getAddress());serializer.endTag(null, "address");serializer.startTag(null, "date");serializer.text(info.getDate() + "");serializer.endTag(null, "date");serializer.endTag(null, "sms");}serializer.endTag(null, "smss");serializer.endDocument();os.close();Toast.makeText(context,"备份短信成功,备份储存路径为:"+ Environment.getExternalStorageDirectory()+ "backSms.xml", Toast.LENGTH_SHORT).show();} catch (Exception e) {Toast.makeText(context, "备份短信息失败!!", Toast.LENGTH_SHORT).show();e.printStackTrace();}}}

视图代码,由于只是一个案例,只有一个按钮

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="backSms"        android:text="@string/bt_queryAll" /></RelativeLayout>

权限清单文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.examp.backsms"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <!-- 获取 读写短信的权限 -->    <uses-permission android:name="android.permission.READ_SMS" />    <uses-permission android:name="android.permission.WRITE_SMS" />    <!-- 获取写入SD卡的权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.examp.backsms.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

资源文件string.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">0019短信备份</string>    <string name="action_settings">Settings</string>    <string name="bt_queryAll">备份短信</string></resources>

注:本代码只是事例代码,不能够承受过大的数据压力,所以实际开发的时候是边读数据边备份.




1 0
原创粉丝点击