记录一下最近的东西,但是有一点,Android导出来的VCard只能是V2.1的不能与V3.0的互相导入。
这里记录一段代码。
获取联系人,提取lookupKey
public static List<PhoneContact> getPhoneContact(Context context) {
List<PhoneContact> list = new ArrayList<PhoneContact>();
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,
null, null,
null, null);
if (cursor == null || !cursor.moveToFirst()) {
if (cursor != null) {
cursor.close();
}
return list;
}
while (!cursor.isAfterLast()) {
PhoneContact contact = new PhoneContact();
contact._id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
contact.lookupKey = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.LOOKUP_KEY));
contact.displayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
int phoneCount = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (phoneCount > 0) {
list.add(contact);
}
cursor.moveToNext();
}
if (cursor != null) {
cursor.close();
}
return list;
}
从lookupKey获取VCard
public static String getVCard(Context context, String lookupKey) {
String vCard = "";
Uri uri = Uri.withAppendedPath(
ContactsContract.Contacts.CONTENT_VCARD_URI,
lookupKey);
AssetFileDescriptor fd;
try {
fd = context.getContentResolver()
.openAssetFileDescriptor(uri, "r");
FileInputStream fis = fd.createInputStream();
byte[] b = new byte[(int) fd.getDeclaredLength()];
fis.read(b);
vCard = new String(b);
Log.i("GuoQi", vCard);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return vCard;
}
最后是导入通讯录
public static void importContactByVCard(Context context,String filePath){
Uri uri = Uri.parse("file://"+filePath);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "text/x-vcard");
//android系统版本不同,所以系统中的activity也会不同。
try{
intent.setComponent(
new ComponentName("com.android.contacts","com.android.contacts.vcard.ImportVCardActivity"));
context.startActivity(intent);
}catch(Exception e){
try{
intent.setComponent(
new ComponentName("com.android.contacts","com.android.contacts.ImportVCardActivity"));
context.startActivity(intent);
}catch(Exception e1){
try{
intent.setComponent(
new ComponentName("com.android.contacts","com.android.contacts.common.vcard.ImportVCardActivity"));
context.startActivity(intent);
}catch(Exception e2){
intent.setComponent(null);
context.startActivity(intent);
}
}
}
}