精华内容
下载资源
问答
  • android手机通讯录备份还原 android手机通讯录备份还原 android手机通讯录备份还原
  • 一 需求分析本设计要求完成一个基于C/S模式的通讯录备份软件,采用C/S架构,具有易用、美观的图形界面。1.1 服务器端功能要求能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录加密...

    一 需求分析

    本设计要求完成一个基于C/S模式的通讯录备份软件,采用C/S架构,具有易用、美观的图形界面。

    1.1 服务器端功能要求

    能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录

    加密存储每个用户的通讯录

    1.2 客户端功能要求

    能登陆连接到服务器,回应:连接成功/失败

    能备份本机通讯录

    能实时更新本机通讯录

    能查询本机通讯录

    1.3 本程序可实现功能

    客户端

    能登陆连接到服务器,回应:连接成功/失败

    能将本机通讯录备份到数据库

    能实时从数据库获取最新内容更新本机通讯录

    能查询本机通讯录

    能增加、删除并且修改本机通讯录

    服务端

    能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录

    加、解密用户存储的通讯录

    二 程序实现

    2.1 总体结构

    客户端首先建立一个本地文件来存储本地的通讯录数据,通过本地文件对通讯录内容进行查询操作,在数据库中进行通讯录的增添、删除以及修改操作。同时备份功能可将本地文件中的通讯录内容上传至数据库中,更新功能则是将经过增添、删除或修改后的数据库中通讯录内容更新到本地文件中。

    服务器负责验证客户端的登录账号和密码,若一致则与MySQL进行连接并回应客户端登陆成功,否则回应登陆失败。若登录成功,则服务端可响应客户端的备份请求,将本地文件中的通讯录内容经过DES加密后备份至数据库;还可响应客户端的更新要求,将数据库中通讯录的内容经过DES解密后更新至本地文件中。

    2.2 模块关系

    8f524ad4be7b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    参考文档和完整的文档和源码下载地址:

    展开全文
  • Android通讯录备份恢复

    2016-08-15 04:42:20
    Android通讯录备份恢复
  • 通讯录备份还原.rar
  • . 手机通讯录可以说是我们手机中最重要的应用功能之一特别是我们在更换手机的时候首先要...最重要的是这个方法很慢所以下面我们就给大家介绍几个比较简单好用的通讯录备份方法 目前手机从系统上可以分为苹果的iOS系统和
  • android通讯录备份与还原

    热门讨论 2011-07-08 18:19:52
    实现简单android通讯录备份与还原,网上这方面的资料很少,贴出来分享给有需要的朋友,支持2.0以上版本
  • 手机通讯录可以说是我们手机中最重要的应用功能之一特别是我们在更换手机的时候首先...最重要的是这个方法很慢所以下面我们就给大家介绍几个比较简单好用的通讯录备份方法 目前手机从系统上可以分为苹果的iOS系统和谷歌
  • 现在手机已经成为用户必不可少的社交工具之一,而手机上的通讯录是非常重要的,最直接连接的途径,那么iPhone通讯录备份怎么导出来呢?如何才能导出来轻松传输到另一台手机上呢,下面就为大家带来一个通讯录导出的...

    现在手机已经成为用户必不可少的社交工具之一,而手机上的通讯录是非常重要的,最直接连接的途径,那么iPhone通讯录备份怎么导出来呢?如何才能导出来轻松传输到另一台手机上呢,下面就为大家带来一个通讯录导出的方法,一起来了解下吧。
    在这里插入图片描述
    通过iCloud备份导出:

    首先通过电脑浏览器登录iCloud网址,然后登录自己的iCloud账号密码,登录成功之后选择“通讯录”功能;
    在这里插入图片描述
    进入之后就能看到在iCloud中备份的联系人数据,选择左下角的设置图标,然后点击全选按钮,最后点击“导出vCard”即可将通讯录所有都导到电脑中。

    通过互盾苹果恢复精灵恢复导出:

    该方法是借助恢复软件来帮助用户导出通讯录,直接在电脑上下载一个【互盾苹果恢复精灵】软件,然后通过连接手机直接进行从iPhone设备扫描恢复;
    在这里插入图片描述
    扫描恢复完成之后就可以在左侧看到“联系人”的选项,可以全选中联系人,最后导出选中记录即可完成通讯录的导出。

    以上则是针对iPhone通讯录备份怎么导出来(http://www.shoujihuifu.com/2288.html)的详细方法,用户可以通过这两种方法进行导出通讯录,如果你手机联系人还在的话也可以利用同步助手导到另一个手机中。

    展开全文
  • 通讯录备份还原二 package app.utils; import java.util.ArrayList; import java.util.List; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import ...

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

    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

    展开全文
  • 手机通讯录备份还原四___综合一 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import ...

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

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    
    import a_vcard.android.provider.Contacts;
    import a_vcard.android.syncml.pim.VDataBuilder;
    import a_vcard.android.syncml.pim.VNode;
    import a_vcard.android.syncml.pim.vcard.ContactStruct;
    import a_vcard.android.syncml.pim.vcard.ContactStruct.ContactMethod;
    import a_vcard.android.syncml.pim.vcard.ContactStruct.PhoneData;
    import a_vcard.android.syncml.pim.vcard.VCardComposer;
    import a_vcard.android.syncml.pim.vcard.VCardException;
    import a_vcard.android.syncml.pim.vcard.VCardParser;
    import android.app.Activity;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Environment;
    import android.provider.ContactsContract;
    import android.provider.ContactsContract.CommonDataKinds.Email;
    import android.provider.ContactsContract.CommonDataKinds.Phone;
    import android.provider.ContactsContract.CommonDataKinds.StructuredName;
    import android.provider.ContactsContract.RawContacts;
    import android.provider.ContactsContract.RawContacts.Data;
    import android.widget.Toast;
    
    public class ContactInfo {
    
    	/** MUST exist */
    	private String name; // 姓名
    
    	/** 联系人电话信息 */
    	public static class PhoneInfo {
    		/** 联系电话类型 */
    		public int type;
    		/** 联系电话 */
    		public String number;
    	}
    
    	/** 联系人邮箱信息 */
    	public static class EmailInfo {
    		/** 邮箱类型 */
    		public int type;
    		/** 邮箱 */
    		public String email;
    	}
    
    	private List<PhoneInfo> phoneList = new ArrayList<PhoneInfo>(); // 联系号码
    	private List<EmailInfo> email = new ArrayList<EmailInfo>(); // Email
    
    	/**
    	 * 构造联系人信息
    	 * 
    	 * @param name
    	 *            联系人姓名
    	 */
    	public ContactInfo(String name) {
    		this.name = name;
    	}
    
    	/** 姓名 */
    	public String getName() {
    		return name;
    	}
    
    	/** 姓名 */
    	public ContactInfo setName(String name) {
    		this.name = name;
    		return this;
    	}
    
    	/** 联系电话信息 */
    	public List<PhoneInfo> getPhoneList() {
    		return phoneList;
    	}
    
    	/** 联系电话信息 */
    	public ContactInfo setPhoneList(List<PhoneInfo> phoneList) {
    		this.phoneList = phoneList;
    		return this;
    	}
    
    	/** 邮箱信息 */
    	public List<EmailInfo> getEmail() {
    		return email;
    	}
    
    	/** 邮箱信息 */
    	public ContactInfo setEmail(List<EmailInfo> email) {
    		this.email = email;
    		return this;
    	}
    
    	@Override
    	public String toString() {
    		return "{name: " + name + ", number: " + phoneList + ", email: " + email + "}";
    	}
    
    	/**
    	 * 联系人 备份/还原操作
    	 * 
    	 * @author LW
    	 * 
    	 */
    	public static class ContactHandler {
    
    		private static ContactHandler instance_ = new ContactHandler();
    
    		/** 获取实例 */
    		public static ContactHandler getInstance() {
    			return instance_;
    		}
    
    		/**
    		 * 获取联系人指定信息
    		 * 
    		 * @param projection
    		 *            指定要获取的列数组, 获取全部列则设置为null
    		 * @return
    		 * @throws Exception
    		 */
    		public Cursor queryContact(Activity context, String[] projection) {
    			// 获取联系人的所需信息
    			Cursor cur = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
    					projection, null, null, null);
    			return cur;
    		}
    
    		/**
    		 * 获取联系人信息
    		 * 
    		 * @param context
    		 * @return
    		 */
    		public List<ContactInfo> getContactInfo(Activity context) {
    			List<ContactInfo> infoList = new ArrayList<ContactInfo>();
    			String[] selection = new String[] { Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER,
    					Phone.PHOTO_URI, Phone.CONTACT_ID, Phone.HAS_PHONE_NUMBER };
    
    			Cursor cur = context.getContentResolver().query(Phone.CONTENT_URI, selection, null,
    					null, null);
    
    			if (cur.moveToFirst()) {
    				do {
    
    					// 获取联系人id号
    					String id = cur.getString(cur.getColumnIndex(Phone.CONTACT_ID));
    					// 获取联系人姓名
    					String displayName = cur.getString(cur
    							.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    					ContactInfo info = new ContactInfo(displayName);// 初始化联系人信息
    					int columnindex = cur
    							.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
    					// 查看联系人有多少电话号码, 如果没有返回0
    					int phoneCount = cur.getInt(columnindex);
    
    					if (phoneCount > 0) {
    
    						Cursor phonesCursor = context.getContentResolver().query(
    								ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
    								ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null,
    								null);
    
    						if (phonesCursor.moveToFirst()) {
    							List<ContactInfo.PhoneInfo> phoneNumberList = new ArrayList<ContactInfo.PhoneInfo>();
    							do {
    								// 遍历所有电话号码
    								String phoneNumber = phonesCursor
    										.getString(phonesCursor
    												.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    								// 对应的联系人类型
    								int type = phonesCursor
    										.getInt(phonesCursor
    												.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
    
    								// 初始化联系人电话信息
    								ContactInfo.PhoneInfo phoneInfo = new ContactInfo.PhoneInfo();
    								phoneInfo.type = type;
    								phoneInfo.number = phoneNumber;
    
    								phoneNumberList.add(phoneInfo);
    							} while (phonesCursor.moveToNext());
    							// 设置联系人电话信息
    							info.setPhoneList(phoneNumberList);
    						}
    					}
    
    					// 获得联系人的EMAIL
    					Cursor emailCur = context.getContentResolver().query(
    							ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
    							ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=" + id, null,
    							null);
    
    					if (emailCur.moveToFirst()) {
    						List<ContactInfo.EmailInfo> emailList = new ArrayList<ContactInfo.EmailInfo>();
    						do {
    							// 遍历所有的email
    							String email = emailCur.getString(emailCur
    									.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA1));
    							int type = emailCur.getInt(emailCur
    									.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
    
    							// 初始化联系人邮箱信息
    							ContactInfo.EmailInfo emailInfo = new ContactInfo.EmailInfo();
    							emailInfo.type = type; // 设置邮箱类型
    							emailInfo.email = email; // 设置邮箱地址
    
    							emailList.add(emailInfo);
    						} while (emailCur.moveToNext());
    
    						info.setEmail(emailList);
    					}
    
    					// Cursor postalCursor =
    					// getContentResolver().query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
    					// null,
    					// ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID
    					// + "=" + id, null, null);
    					infoList.add(info);
    				} while (cur.moveToNext());
    			}
    			return infoList;
    		}
    
    		/**
    		 * 备份联系人
    		 */
    		public void backupContacts(Activity context, List<ContactInfo> infos) {
    			if (infos.size() <= 0) {
    				Toast.makeText(context, "请先添加联系人", 0).show();
    				return;
    			}
    			try {
    				
    				String path = Environment.getExternalStorageDirectory() + "/"+System.currentTimeMillis()+".vcf";
    
    				OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(path),
    						"UTF-8");
    
    				VCardComposer composer = new VCardComposer();
    
    				for (ContactInfo info : infos) {
    					ContactStruct contact = new ContactStruct();
    					contact.name = info.getName();
    					// 获取联系人电话信息, 添加至 ContactStruct
    					List<ContactInfo.PhoneInfo> numberList = info.getPhoneList();
    					for (ContactInfo.PhoneInfo phoneInfo : numberList) {
    						contact.addPhone(phoneInfo.type, phoneInfo.number, null, true);
    					}
    					// 获取联系人Email信息, 添加至 ContactStruct
    					List<ContactInfo.EmailInfo> emailList = info.getEmail();
    					for (ContactInfo.EmailInfo emailInfo : emailList) {
    						contact.addContactmethod(Contacts.KIND_EMAIL, emailInfo.type,
    								emailInfo.email, null, true);
    					}
    					String vcardString = composer.createVCard(contact,
    							VCardComposer.VERSION_VCARD30_INT);
    					writer.write(vcardString);
    					writer.write("\n");
    
    					writer.flush();
    				}
    				writer.close();
    
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			} catch (VCardException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    
    			
    		}
    
    		/**
    		 * 获取vCard文件中的联系人信息
    		 * @param path 
    		 * 
    		 * @return
    		 */
    		public List<ContactInfo> restoreContacts(String path) throws Exception {
    			List<ContactInfo> contactInfoList = new ArrayList<ContactInfo>();
    
    			VCardParser parse = new VCardParser();
    			VDataBuilder builder = new VDataBuilder();
    			String file = path;
    
    			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(
    					file), "UTF-8"));
    
    			String vcardString = "";
    			String line;
    			while ((line = reader.readLine()) != null) {
    				vcardString += line + "\n";
    			}
    			reader.close();
    
    			boolean parsed = parse.parse(vcardString, "UTF-8", builder);
    
    			if (!parsed) {
    				throw new VCardException("Could not parse vCard file: " + file);
    			}
    
    			List<VNode> pimContacts = builder.vNodeList;
    
    			for (VNode contact : pimContacts) {
    
    				ContactStruct contactStruct = ContactStruct.constructContactFromVNode(contact, 1);
    				// 获取备份文件中的联系人电话信息
    				List<PhoneData> phoneDataList = contactStruct.phoneList;
    				List<ContactInfo.PhoneInfo> phoneInfoList = new ArrayList<ContactInfo.PhoneInfo>();
    				for (PhoneData phoneData : phoneDataList) {
    					ContactInfo.PhoneInfo phoneInfo = new ContactInfo.PhoneInfo();
    					phoneInfo.number = phoneData.data;
    					phoneInfo.type = phoneData.type;
    					phoneInfoList.add(phoneInfo);
    				}
    
    				// 获取备份文件中的联系人邮箱信息
    				List<ContactMethod> emailList = contactStruct.contactmethodList;
    				List<ContactInfo.EmailInfo> emailInfoList = new ArrayList<ContactInfo.EmailInfo>();
    				// 存在 Email 信息
    				if (null != emailList) {
    					for (ContactMethod contactMethod : emailList) {
    						if (Contacts.KIND_EMAIL == contactMethod.kind) {
    							ContactInfo.EmailInfo emailInfo = new ContactInfo.EmailInfo();
    							emailInfo.email = contactMethod.data;
    							emailInfo.type = contactMethod.type;
    							emailInfoList.add(emailInfo);
    						}
    					}
    				}
    				ContactInfo info = new ContactInfo(contactStruct.name).setPhoneList(phoneInfoList)
    						.setEmail(emailInfoList);
    				contactInfoList.add(info);
    			}
    
    			return contactInfoList;
    		}
    
    		/**
    		 * 向手机中录入联系人信息
    		 * 
    		 * @param info
    		 *            要录入的联系人信息
    		 */
    		public void addContacts(Activity context, ContactInfo info) {
    			ContentValues values = new ContentValues();
    			// 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
    			Uri rawContactUri = context.getContentResolver()
    					.insert(RawContacts.CONTENT_URI, values);
    			long rawContactId = ContentUris.parseId(rawContactUri);
    
    			// 往data表入姓名数据
    			values.clear();
    			values.put(Data.RAW_CONTACT_ID, rawContactId);
    			values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
    			values.put(StructuredName.GIVEN_NAME, info.getName());
    			context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI,
    					values);
    
    			// 获取联系人电话信息
    			List<ContactInfo.PhoneInfo> phoneList = info.getPhoneList();
    			/** 录入联系电话 */
    			for (ContactInfo.PhoneInfo phoneInfo : phoneList) {
    				values.clear();
    				values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID,
    						rawContactId);
    				values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
    				// 设置录入联系人电话信息
    				values.put(Phone.NUMBER, phoneInfo.number);
    				values.put(Phone.TYPE, phoneInfo.type);
    				// 往data表入电话数据
    				context.getContentResolver().insert(
    						android.provider.ContactsContract.Data.CONTENT_URI, values);
    			}
    
    			// 获取联系人邮箱信息
    			List<ContactInfo.EmailInfo> emailList = info.getEmail();
    
    			/** 录入联系人邮箱信息 */
    			for (ContactInfo.EmailInfo email : emailList) {
    				values.clear();
    				values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID,
    						rawContactId);
    				values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
    				// 设置录入的邮箱信息
    				values.put(Email.DATA, email.email);
    				values.put(Email.TYPE, email.type);
    				// 往data表入Email数据
    				context.getContentResolver().insert(
    						android.provider.ContactsContract.Data.CONTENT_URI, values);
    			}
    
    		}
    
    	}
    
    }
    

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

    展开全文
  • android通讯录备份恢复 新增和修改 目前用的是新增,云端判断返回的手机号是否为空 /** * 向手机中录入联系人信息 * * @param contactListBean 要录入的联系人信息 */ public void addContacts...
  • 手机通讯录备份代码实现一和二的思路是通过 备份: while循环找到contact_id然后根据id找对应联系人所有电话和邮箱. 还原: 获取联系人列表通过for循环,一个一个插入手机通讯录 这两种方式的弊端是 备份速度太慢,查询...
  • Android手机通讯录备份和恢复项目登录功能注册功能找回密码修改密码备份功能恢复功能恢复数据从服务器导出为Excel文件 登录功能 注册功能 找回密码 同注册功能 修改密码 同注册功能 备份功能 恢复功能 恢复数据...
  • iOS 通讯录备份、恢复

    千次阅读 热门讨论 2016-01-11 11:32:00
    和相册 备份一样,公司产品备份功能有通讯录备份 功能,自然也有通讯录恢复了。iOS通讯录相关操作,iOS对通讯录的操作离不开的框架: #import #import iOS提供给我们了通讯录的相关信息,也给我们提供了简单的...
  • 一 需求分析本设计要求完成一个基于C/S模式的通讯录备份软件,采用C/S架构,具有易用、美观的图形界面。1.1 服务器端功能要求能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录加密...
  • 需求分析 在2年前就学过安卓开发,那时候安卓开发还是很火,但是感觉现在不怎么热潮了,这学期刚好有门c++课,实现通讯录备份,网络通信使用socket通信,服务器端用...
  • 手机通讯录可以说是我们手机中最重要的应用功能之一 特别是我们在更换手机的时候首先要做的...并且 最重要的是这个方法很慢 所以下面我们就给大家介绍几个比较简单好用的通讯录备份方法 目前手机从系统上可以分为苹果的
  • 一 需求分析本设计要求完成一个基于C/S模式的通讯录备份软件,采用C/S架构,具有易用、美观的图形界面。1.1 服务器端功能要求能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录加密...
  • 一 需求分析本设计要求完成一个基于C/S模式的通讯录备份软件,采用C/S架构,具有易用、美观的图形界面。1.1 服务器端功能要求能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录加密...
  • 本设计要求完成一个基于C/S模式的通讯录备份软件,采用C/S架构,具有易用、美观的图形界面。 1.1 服务器端功能要求 能够验证客户身份,接收客户端的备份通讯录的请求,能够实时备份和更新客户的通讯录 加密...
  • 手机通讯录备份

    2012-11-17 14:49:27
    今天帮姑姑备份诺基亚手机通讯录到安卓手机,因为很少碰手机,竟然搞了一个小时。。。 最后方法如下: 1 用诺基亚pc套件把通讯录存为.csv格式。  2 把.csv格式的通讯录用QQ的通讯录功能导入,然后导出为vcard...
  • importjava.io.ByteArrayOutputStream;importjava.nio.charset.Charset;importjava.security.MessageDigest;import java.util.*;importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 694
精华内容 277
关键字:

通讯录备份