• [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 com.tsh.backsmstrue;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.tsh.backsmstrue.domain.SmsInfo;
    import com.tsh.backsmstrue.utils.SmsUtil;
    
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        /**
         * 备份短信
         * @param v
         */
        public void backupSms(View v){
            Uri uri=Uri.parse("content://sms/");
            ContentResolver resolver=getContentResolver();
            String[] projection=new String[]{"address","date","type","body"};
            Cursor cursor=resolver.query(uri, projection, null, null, null);
            List<SmsInfo> smss=new ArrayList<SmsInfo>();
            while(cursor.moveToNext()){
                String body=cursor.getString(cursor.getColumnIndex("body"));
                System.out.println(body);
                System.out.println("===========");
                SmsInfo smsinfo=new SmsInfo();
                smsinfo.setAddress("110");
                smsinfo.setMessage(body);
                smss.add(smsinfo);
            }
            SmsUtil.backSms2(smss, this);
            cursor.close();
        }
    }

    工具类:

    package com.tsh.backsmstrue.utils;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.List;
    
    import org.xmlpull.v1.XmlSerializer;
    
    import com.tsh.backsmstrue.domain.SmsInfo;
    
    import android.content.Context;
    import android.os.Environment;
    import android.util.Xml;
    import android.view.View;
    import android.widget.Toast;
    
    
    public class SmsUtil {
        /**
         * 备份短信第二种
         * @param v
         */
        public static void backSms2(List<SmsInfo> smsInfos,Context context){
            XmlSerializer serializer=Xml.newSerializer();
            try {
                File file=new File(Environment.getExternalStorageDirectory(),"backup2.xml");
                FileOutputStream os=new FileOutputStream(file);
                serializer.setOutput(os, "utf-8");
                serializer.startDocument("utf-8", true);
                serializer.startTag(null, "smss");
                for(SmsInfo sms:smsInfos){
                    serializer.startTag(null, "sms");
                    serializer.attribute(null, "tel", sms.getAddress());
                    serializer.text(sms.getMessage());
                    serializer.endTag(null, "sms");
                }
                serializer.endTag(null, "smss");
                serializer.endDocument();
                os.close();
                Toast.makeText(context, "保存成功", 0).show();
            } catch (Exception e) {
                Toast.makeText(context, "保存失败", 0).show();
            }
        }
    }
  • 相关阅读:
    4星|万维刚《你有你的计划,世界另有计划》:前物理学家的读书笔记,主要是社会科学领域的书
    3星|《耕作革命》:免耕、保留作物残茬、不同作物轮作的保护性农业,环保且高产
    2.5星|《逆商》:1997年出版的鸡汤,强调积极乐观面对逆境
    3星|《产品游戏化》:游戏类软件产品的宏观开发流程
    2星|曾仕强《人性管理》:故事会水平,像是没有学术背景的讲师
    3.5星|《是谁出的题这么难,到处都是正确答案》:​麦肯锡的经历,文艺妈妈的笔,温馨的父母与丈夫
    基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 根据验证过程,远程证书无效------解决方法
    XmlDocument.Load(url) 本地和http远程
    Windows服务启动进程----Cjwdev.WindowsApi.dll
    winform无需安装pdf阅读器打开pdf文件
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5272573.html
Copyright © 2020-2023  润新知