[android] 短信的备份

前端之家收集整理的这篇文章主要介绍了[android] 短信的备份前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用ddms给模拟器发送几条短信,找到短信数据库导出

/data/data/com.android.providers.telephony/databases/mmssms.db

数据库字段:address(手机号),date(日期),type1接收,2发送),body内容

 

在系统的全部源代码中找到packages/providers/TelephonyProvider

查看清单文件,找到provider节点,

看到android:readPermisssion=”android.permission.READ_SMS” 

android:writePermission=”android.permission.WRITE_SMS” 权限

找到TelephonyProvider类里的satic静态代码块,看到规则部分,最简单的content://sms/

 

调用Uri类的parse(string) 方法获取Uri对象

调用getContentResolver()方法获取ContentResolver对象,中间人对象

调用ContentResolver对象的query(uri,projection,selection,selectArgs,sortOrder)方法,得到Cursor对象,参数:projectionString[] 查询字段,条件,参数,排序

while循环Cursor对象,调用Cursor对象的moveToNext() 调用Cursor对象的getString()调用Cursor对象的getClumnIndex()

数据中日期date字段是时间戳毫秒值

在清单文件中定义一下权限

 

当短信内容比较少的时候没问题,多的时候会有问题,应该是遍读遍备份。

根据xml文件的序列化那节,完成保存到文件中。保存到sd卡的时候也要权限

activity:

 

package@H_301_174@ com.tsh.backsmstrue;

@H_301_174@import@H_301_174@ java.util.ArrayList;
@H_301_174@ java.util.List;

@H_301_174@ com.tsh.backsmstrue.domain.SmsInfo;
@H_301_174@ com.tsh.backsmstrue.utils.SmsUtil;

@H_301_174@ android.app.Activity;
@H_301_174@ android.content.ContentResolver;
@H_301_174@ android.database.Cursor;
@H_301_174@ android.net.Uri;
@H_301_174@ android.os.Bundle;
@H_301_174@ android.view.View;

@H_301_174@public @H_301_174@class MainActivity @H_301_174@extends@H_301_174@ Activity {

    @Override
    @H_301_174@protected @H_301_174@void@H_301_174@ onCreate(Bundle savedInstanceState) {
        @H_301_174@super@H_301_174@.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /**@H_301_174@
     * 备份短信
     * @param@H_301_174@ v
     @H_301_174@*/
    @H_301_174@ backupSms(View v){
        Uri uri=Uri.parse("content://sms/"@H_301_174@);
        ContentResolver resolver=@H_301_174@getContentResolver();
        String[] projection=@H_301_174@new String[]{"address","date","type","body"@H_301_174@};
        Cursor cursor=resolver.query(uri,@H_301_174@null,1)">null@H_301_174@);
        List<SmsInfo> smss=@H_301_174@new ArrayList<SmsInfo>@H_301_174@();
        @H_301_174@while@H_301_174@(cursor.moveToNext()){
            String body=cursor.getString(cursor.getColumnIndex("body"@H_301_174@));
            System.out.println(body);
            System.out.println("==========="@H_301_174@);
            SmsInfo smsinfo=@H_301_174@new@H_301_174@ SmsInfo();
            smsinfo.setAddress("110"@H_301_174@);
            smsinfo.setMessage(body);
            smss.add(smsinfo);
        }
        SmsUtil.backSms2(smss,@H_301_174@this@H_301_174@);
        cursor.close();
    }
}

 

工具类:

@H_301_174@ com.tsh.backsmstrue.utils;

@H_301_174@ java.io.File;
@H_301_174@ java.io.FileOutputStream;
@H_301_174@ org.xmlpull.v1.XmlSerializer;

@H_301_174@ com.tsh.backsmstrue.domain.SmsInfo;

@H_301_174@ android.content.Context;
@H_301_174@ android.os.Environment;
@H_301_174@ android.util.Xml;
@H_301_174@ android.view.View;
@H_301_174@ android.widget.Toast;


@H_301_174@class@H_301_174@ SmsUtil {
    @H_301_174@
     * 备份短信第二种
     * static @H_301_174@void backSms2(List<SmsInfo>@H_301_174@ smsInfos,Context context){
        XmlSerializer serializer=@H_301_174@Xml.newSerializer();
        @H_301_174@try@H_301_174@ {
            File file=@H_301_174@new File(Environment.getExternalStorageDirectory(),"backup2.xml"@H_301_174@);
            FileOutputStream os=@H_301_174@ FileOutputStream(file);
            serializer.setOutput(os,"utf-8"@H_301_174@);
            serializer.startDocument("utf-8",1)">true@H_301_174@);
            serializer.startTag(301_174@);
            @H_301_174@for@H_301_174@(SmsInfo sms:smsInfos){
                serializer.startTag(301_174@);
                serializer.attribute(301_174@,sms.getAddress());
                serializer.text(sms.getMessage());
                serializer.endTag(@H_301_174@);
            }
            serializer.endTag(@H_301_174@);
            serializer.endDocument();
            os.close();
            Toast.makeText(context,"保存成功",0@H_301_174@).show();
        } @H_301_174@catch@H_301_174@ (Exception e) {
            Toast.makeText(context,"保存失败",1)">).show();
        }
    }
}

 

猜你在找的Android相关文章