手机通讯录备份代码实现二

手机通讯录备份代码实现二

package app.utils;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.telephony.SmsManager;
import android.text.TextUtils;

import com.google.common.collect.Lists;

/**
 * 短信电话相关工具类<br/>
 * 目录: <br/>
 * 1.发送短信 sendSMS() <br/>
 * 2.拨打电话短信 callPhone() <br/>
 * 3.获取所有短信记录getAllSms() <br/>
 * 4.获取所有联系人getContactsList() <br/>
 * 5.获取所有联系人getContactList() : 与第4条所生成的数据结构不同 <br/>
    
 * <b>注</b>:使用时请添加相关权限
 *
 * @author 赵LW QQ:739043667
 */
public class SMSHelper {

    /**
     * 发送短信 (需要权限SMS_Send)
     *
     * @param num  电话
     * @param text 短信内容
     */
    public static void sendSMS(String num, String text) {
        SmsManager.getDefault().sendTextMessage(num, null, text, null, null);
    }

    public static void callPhone(Context context, String num) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + num));
        // 开启系统拨号器
        context.startActivity(intent);
    }

    /**
     * 获取所有联系人 需要权限
     * <uses-permission android:name="android.permission.READ_CONTACTS" />
     * 数据结构:ContactBean(String displayName, String numList)
     *
     * @param
     * @return
     */
    public static List<ContactBean> getContactList(Context context) {

        Logger.d("SMSHelper", "-----------SMSHelper#getContactList()----------");
        Logger.d("SMSHelper", "开始查询 Data 表");
        List<ContactBean> list = new ArrayList<ContactBean>();

        ContactsContract.Data._ID
        ContentResolver resolver = context.getContentResolver();
        Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI, null, null, null, null);

        if (cursor == null && cursor.getCount() <= 0) {
            return null;
        }
        Logger.d("SMSHelper", "cursor.getCount():" + cursor.getCount());

        while (cursor.moveToNext()) {

            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
            String number = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DATA1));

            //数据清洗
            if (TextUtils.isEmpty(number)) {
                continue;
            }
            if (!TextUtils.isDigitsOnly(number = number.replace(" ", ""))) {
                continue;
            }

            if (TextUtils.isEmpty(name)) {
                name = number;
            }
            list.add(new ContactBean(name, number));
        }
        cursor.close();
        return list;
    }

    /**
     * 获取所有联系人
     * 数据结构:ContactsBean(String displayName, List<String> numList)
     * <p/>
     * 需要权限:
     * <uses-permission android:name="android.permission.READ_CONTACTS" />
     *
     * @param
     * @return List<ContactsBean>
     */
    public static List<ContactsBean> getContactsList(Context context) {

        Logger.d("SMSHelper", "-----------SMSHelper#getContactsList()----------");
        Logger.d("SMSHelper", "开始查询 Contacts 表");
        List<ContactsBean> list = new ArrayList<ContactsBean>();
        ContactsBean bean = null;
        ContentResolver resolver = context.getContentResolver();
        Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        if (cursor == null && cursor.getCount() <= 0) {
            return null;
        }
        Logger.d("SMSHelper", "cursor.getCount():" + cursor.getCount());

        while (cursor.moveToNext()) {
            bean = new ContactsBean();

            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));//姓名

            wirteNumbers(resolver, name, bean);
            list.add(bean);
        }
        cursor.close();
        return list;
    }

    /**
     * 根据联系人姓名查询电话
     * 并写入
     */
    private static void wirteNumbers(final ContentResolver contentResolver, String name, final ContactsBean bean) {
        Logger.d("SMSHelper", "开始查询 Data 表 : 查询联系人:" + name);

        Cursor dataCursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data.DATA1},
                ContactsContract.Data.DISPLAY_NAME + "= ? ",
                new String[]{name}, null);
        if (dataCursor == null) {
            Logger.w("SMSHelper", "dataCursor == null ");

            return;
        }
        if (dataCursor.getCount() > 0) {
            bean.setName(name);
            Logger.w("SMSHelper", " 电话信息 -- size: " + dataCursor.getCount());
            while (dataCursor.moveToNext()) {
                String number = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.DATA1));

                if (TextUtils.isEmpty(number) || !TextUtils.isDigitsOnly(number = number.replace(" ", ""))) {
                    Logger.w("SMSHelper", " 电话信息(异常) -- number: " + number);
                    continue;
                }
                bean.getNumList().add(number);
                Logger.w("SMSHelper", " 电话信息 -- number: " + number);
            }
            dataCursor.close();
        } else {
            Logger.w("SMSHelper", " 无电话信息 -- name: " + name);
        }
        return;
    }

    /**
     * 获取短信记录 (需要bean: Smsinfo.java和 Read_SMS权限)
     * <p>
     * <uses-permission android:name="android.permission.READ_SMS" />
     *
     * @return List<Smsinfo>
     * @author zlw QQ:739043667
     */
    public static List<SmsInfo> getAllSms(Context context) {
        List<SmsInfo> smsinfos = new ArrayList<SmsInfo>();

        Uri uri = Uri.parse("content://sms/");
        ContentResolver resolver = context.getContentResolver();
        Cursor cursor = resolver.query(uri, new String[]{"address", "date", "type", "body"}, null, null, null);

        SmsInfo smsinfo = null;
        while (cursor.moveToNext()) {
            String address = cursor.getString(0);
            String date = cursor.getString(1);
            String type = cursor.getString(2);
            String body = cursor.getString(3);
            smsinfo = new SmsInfo(address, date, type, body);
            smsinfos.add(smsinfo);
        }

        cursor.close();
        return smsinfos;
    }

    /**
     * 短信信息Bean 类
     *
     * @param
     * @author zlw QQ:739043667
     * @return
     */
    public static class SmsInfo {
        String address;
        String date;
        String type;
        String body;

        public SmsInfo(String address, String date, String type, String body) {
            super();
            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;
        }

    }

    /**
     * 联系人集合Bean类
     */
    public static class ContactsBean {

        private String name;
        private List<String> numList;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<String> getNumList() {
            return numList;
        }

        public void setNumList(List<String> numList) {
            this.numList = numList;
        }

        public ContactsBean() {
            numList = Lists.newArrayList();
        }

        public ContactsBean(String displayName, List<String> numList) {
            super();
            this.name = displayName;
            if (numList == null) {
                this.numList = Lists.newArrayList();
            } else {
                this.numList = numList;
            }
        }

        @Override
        public String toString() {
            return "ContactsBean [name=" + name + ", numList=" + numList + "]";
        }
    }


    /**
     * 联系人Bean类
     */
    public static class ContactBean {

        private String name;
        private String number;

        public ContactBean() {
        }

        public ContactBean(String name, String number) {
            this.name = name;
            this.number = number;
        }

        public String getName() {
            return name;
        }

        @Override
        public String toString() {
            return "ContactBean{" +
                    "name='" + name + '\'' +
                    ", number='" + number + '\'' +
                    '}';
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getNumber() {
            return number;
        }

        public void setNumber(String number) {
            this.number = number;
        }
    }

}

源代 https://download.csdn.net/download/qq_26296197/11974840

思路很简单,通过pim读取通讯录保存到文件中完成备份工作。还原时再通过这个文件还原通讯录 http://blog.csdn.net/xiaoxiao108/archive/2010/10/17/5947240.aspx 如果你发现有什么不合理的,需要改进的地方,联系328452421@qq.com 朱晓 (泰山学院)。相互交流 谢谢 现在用的手机用了4年半了,其中摔过n次,但是从没坏过,现在还活的好好的。最近想换个windows系统版本的手机。换手机前,先再折腾折腾这个老手机吧,老手机手机只支持j2me。就用它备份通讯录吧。备份手机通讯录的步骤分以下几步 1.通过j2me的pim相关函数把通讯录内容存入字符串中 String name=""; String tel=""; String dis=""; PIM pim = PIM.getInstance(); ContactList contactList = null; Enumeration em = null; try { contactList = (ContactList) pim.openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE); em=contactList.items(); while(em.hasMoreElements()) { Contact contact=(Contact)em.nextElement(); name=contact.getString(Contact.FORMATTED_NAME, 0); dis=dis+name+","; tel=contact.getString(Contact.TEL, 0); dis=dis+tel+"\n"; } } catch (PIMException ex) { ex.printStackTrace(); } 2.通过j2me的FileConnection 完成通讯录的保存工作 FileConnection fc; try { String elem = null; Enumeration e = FileSystemRegistry.listRoots(); while (e.hasMoreElements()) { elem = e.nextElement().toString(); } System.out.println("::"+elem); //fc = (FileConnection) Connector.open("file://localhost/" + elem+"/a.txt"); fc = (FileConnection) Connector.open("file://localhost/c/mobile/video/a.txt"); if (!fc.exists()) { fc.create(); OutputStream is = fc.openOutputStream(); is.write(dis.getBytes("UTF-8"), 0, dis.getBytes("UTF-8").length); is.flush(); is.close(); } } catch (Exception e) { t.setString(e.toString()); } 这样通讯录的内容已经保存到 a.txt ,把它存入电脑就完成了保存工作 这样如果换了新手机就直接可以用a.txt 文件来还原通讯录了 还原的时候只需通过FileConnection 读取备份的文件,还原到手机通讯录就ok了 主要代码如下 FileConnection fc; String s=""; try { String elem = null; Enumeration e = FileSystemRegistry.listRoots(); while (e.hasMoreElements()) { elem = e.nextElement().toString(); } System.out.println("::"+elem); //fc = (FileConnection) Connector.open("file://localhost/" + elem+"/a.txt"); fc = (FileConnection) Connector.open("file://localhost/c/mobile/video/a.txt"); if (!fc.exists()) { throw new IOException("File does not exists"); } if (fc.exists()) { InputStream is = fc.openInputStream(); byte[] b = new byte[1024*5]; int length = is.read(b, 0, 1024*5); is.close(); fc.close(); if(length > 0) { s=new String(b, 0,1024*5,"UTF-8"); String [] str=split(s,"\n"); for(int i=0;i<str.length;i++) { if(str[i].indexOf(",")>=0) { String [] NameAndTel=split(str[i],","); PIM pim = PIM.getInstance(); ContactList contactList = (ContactList) pim.openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE); PIMItem item = null; item = ((ContactList) contactList).createContact (); item.addString(Contact.FORMATTED_NAME, PIMItem.ATTR_NONE, NameAndTel[0]); item.addString (Contact.TEL, PIMItem.ATTR_NONE, NameAndTel[1]); item.commit(); } } } } } catch (Exception e) { t.setString(e.toString()); } 源码下载 http://download.csdn.net/source/2763205
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值