自製Android中的短息備份器源碼

來源:互聯網
上載者:User

標籤:android基礎   android   

簡訊的實體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>

注:本代碼只是案例代碼,不能夠承受過大的資料壓力,所以實際開發的時候是邊讀資料邊備份.




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.