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

手机通讯录备份代码实现一手机通讯录备份还原四 综合一 importjava io BufferedRead importjava io FileInputStr importjava io FileNotFound importjava io FileOutputSt importjava io IOException importjava io InputS android 代码备份通讯录

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

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/_/

今天的文章 手机通讯录备份代码实现一分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-16 07:51
下一篇 2024-12-16 07:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/88167.html