Android contact中应用中存储的联系人,都是在必定基于某个Account的,默认的是
account type:vnd.sec.contact.phone account name:vnd.sec.contact.phone
所以你也可以手动添加账号,然后基于这个账号添加联系人,前面转载的三篇就是账号的认证和创建定义新联系人显示结构等的说明
同时 单纯的在contact中操纵联系人并不能彻底清除contacts2.db中的数据,
而基于账户的清除动作可以彻底删除db中的数据
读取联系人:
public class AndroidContactDB {
private Set<String> m_phones = new HashSet<String>();
private Map<String, String> mOriginalPhonesMap = new HashMap<String, String>();
private String m_name;
private Set<String> m_emails = new HashSet<String>();
private byte[] m_avatar = null;
private Bitmap m_avatarBitmap = null;
private int m_id;
private String m_sortKey = null;
public AndroidContactDB(int id) {
m_id = id;
}
public int getId() {
return m_id;
}
public void addPhone(String phone) {
m_phones.add(phone);
}
public Set<String> getPhones() {
return m_phones;
}
public void addOriginalPhone(String phone, String originalPhone) {
mOriginalPhonesMap.put(phone, originalPhone);
}
public Map<String, String> getOriginalPhoneMap() {
return mOriginalPhonesMap;
}
public String getFirstPhone() {
for (String phone : m_phones) {
return phone;
}
return null;
}
public String getFirstEmail() {
for (String email : m_emails) {
return email;
}
return null;
}
public void addEmail(String email) {
m_emails.add(email);
}
public Set<String> getEmails() {
return m_emails;
}
public void setAvatar(byte[] data) {
m_avatar = data;
}
public void setName(String name) {
m_name = name;
}
public String getName() {
return m_name;
}
public String getSortKey() {
if (m_sortKey == null)
return m_name;
return m_sortKey;
}
public void setSortKey(String key) {
m_sortKey = key;
}
public Bitmap getAvatar() {
if (m_avatar == null || m_avatar.length < 5)
return null;
if (m_avatarBitmap != null)
return m_avatarBitmap;
// m_avatarBitmap = HelperFunc.getScaleImage(m_avatar, 480, 480);
return m_avatarBitmap;
}
方法:
public static void getAllContacts2(Context context,
Map<Integer, AndroidContactDB> contacts) {
Cursor cur = context.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
// TODO
// Phone.NUMBER,Email.DATA,CommonDataKinds.StructuredName.DISPLAY_NAME
// 这几个字段都是 data1, contact_id ,displayname ,sort_key 唯一确定
new String[] { Data.CONTACT_ID, Data.MIMETYPE, Phone.NUMBER,
Email.DATA,
CommonDataKinds.StructuredName.DISPLAY_NAME,
CommonDataKinds.Photo.PHOTO }, null, null, null);
if (cur == null)
return;
int personColumn = cur.getColumnIndex(Data.CONTACT_ID);
int mimeColumn = cur.getColumnIndex(Data.MIMETYPE);
int numberColumn = cur.getColumnIndex(Phone.NUMBER);
int emailColumn = cur.getColumnIndex(Email.DATA);
int nameColumn = cur
.getColumnIndex(CommonDataKinds.StructuredName.DISPLAY_NAME);
int photoColumn = cur.getColumnIndex(CommonDataKinds.Photo.PHOTO);
Logs.d(TAG, "personColumn:" + personColumn + "--mimeColumn:"
+ mimeColumn + "--numberColumn:" + numberColumn
+ "--emailColumn:" + emailColumn + "--nameColumn:" + nameColumn
+ "--photoColumn:" + photoColumn);
while (cur.moveToNext()) {
String mime = cur.getString(mimeColumn);
int personId = cur.getInt(personColumn);
AndroidContactDB contact = contacts.get(personId);
if (contact == null) {
contact = new AndroidContactDB(personId);
contacts.put(personId, contact);
}
if (mime.equals(CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {
String number = cur.getString(numberColumn);
String phone = HelperFunc.getNumberOfString(number);
contact.addPhone(phone);
contact.addOriginalPhone(phone, number);
} else if (mime.equals(CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
contact.addEmail(cur.getString(emailColumn));
} else if (mime
.equals(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)) {
contact.setName(cur.getString(nameColumn));
} else if (mime.equals(CommonDataKinds.Photo.CONTENT_ITEM_TYPE)) {
contact.setAvatar(cur.getBlob(photoColumn));
}
Logs.d(TAG, "=================");
Logs.d(TAG,
"" + "\n personId:" + cur.getInt(personColumn)
+ "\n mimeType:" + cur.getString(mimeColumn)
+ "\n number:" + cur.getString(numberColumn)
+ "\n email:" + cur.getString(emailColumn)
+ "\n name:" + cur.getString(nameColumn)
+ "\n avatar:" + cur.getBlob(photoColumn));
}
cur.close();
}