我可以从android中的联系人列表中获取所有联系人(电话号码和电子邮件) 但取出所有这些需要很长时间。 为了加快这个速度,我在应用程序中存储了一次。但现在我无法获得更新的联系人。他们如何与我的申请同步?
当我尝试在列表中显示它们时出现问题,因为电话号码和电子邮件的用户数据库超过了2000.我目前正在使用基本适配器实现。 有人可以帮我找大型联系人数据库吗?
像GroupMe n Viber这样的应用程序可以非常快速地显示所有用户联系人,有人可以告诉我实现它的简要说明。
String KEY_NAME = "Name";
String KEY_NO = "No";
String selection = ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = 1";
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
String data="";
String name="";
ContactEntry contactObj;
String id;
String index="";
final String[] projection = new String[]{ContactsContract.Contacts._ID , ContactsContract.Contacts.DISPLAY_NAME , ContactsContract.Contacts.HAS_PHONE_NUMBER};
final String[] email_projection = new String[] {ContactsContract.CommonDataKinds.Email.DATA , ContactsContract.CommonDataKinds.Email.TYPE};
final String[] phone_projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};
ContentResolver cr = context.getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI , projection , selection , null , sortOrder);
if(cur.getCount()>0){
while(cur.moveToNext()){
id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
// get the phone number
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI , phone_projection ,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);
while (pCur.moveToNext()){
data = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if(!temp.contains(data) && !data.equals(null)){
//Adding PhoneNumbers in List
}
}
pCur.close();
}
Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, email_projection,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null);
while (emailCur.moveToNext()){
data = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
if(!temp.contains(data) && !data.equals(null)){
//Adding Email in List
}
}
emailCur.close();
}
}
我使用了上面的代码 如何通过CurosrAdaper中的Curser传递所有电子邮件和电话号码。 请帮助我,我没有找到任何解决方案。
答案 0 :(得分:1)
Android提供了一个同步适配器来解决这个问题。您可以参考此示例来实现。 http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
答案 1 :(得分:1)
我遇到了同样的问题,我使用了 ResourceCursorAdapter ,它可以像Android中的Contact API一样快速地获取联系人....
答案 2 :(得分:0)
我认为你需要一个服务(或)Asynctask,它会定期更新从手机到本地应用的联系人。否则你无法同步。