解决方案 »

  1.   

     我是想将号码跟姓名能在一个cursor里面得到
      

  2.   


    看看这个:
    http://stackoverflow.com/questions/2356084/read-all-contacts-phone-numbers-in-androidUri personUri = ContentUris.withAppendedId(People.CONTENT_URI, personId);  
    Uri phonesUri = Uri.withAppendedPath(personUri, People.Phones.CONTENT_DIRECTORY);  String[] proj = new String[] {Phones._ID, Phones.TYPE, Phones.NUMBER, Phones.LABEL}  Cursor cursor = contentResolver.query(phonesUri, proj, null, null, null);希望能帮助你。
      

  3.   

    我都是直接在Data里查:
    [code=Java] private static final String[] projection = {
    ContactsContract.Data.CONTACT_ID,
    ContactsContract.Data.RAW_CONTACT_ID,
    ContactsContract.RawContacts.VERSION, 
    ContactsContract.Data.DISPLAY_NAME,
    ContactsContract.Data.MIMETYPE,
    ContactsContract.CommonDataKinds.Phone.NUMBER,
    ContactsContract.CommonDataKinds.Phone.TYPE,
    ContactsContract.CommonDataKinds.Phone.IS_PRIMARY, 
    ContactsContract.CommonDataKinds.Phone.DATA3};
    private static final String orderBy = ContactsContract.Data.CONTACT_ID;
    public static void getContacts(ContentResolver contentResolver){
    Cursor cursor = contentResolver.query(
    ContactsContract.Data.CONTENT_URI, 
    projection, null, null, orderBy);
    try{
    String contactIdCurrent = null;
    String contactId = null;
    // int version;
    String name;
    ContactPeople contactPeople = null;

    boolean retrievePhone = false;

    while(cursor.moveToNext()){
    contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID));
    if(!contactId.equals(contactIdCurrent)){
    contactIdCurrent = contactId;
    retrievePhone = false;
    contactPeople = contactCache.get(contactId);
    // version = cursor.getInt(cursor.getColumnIndex(ContactsContract.RawContacts.VERSION));
    // if(contactPeople == null || contactPeople.getVersion() < version){
    if(contactPeople == null){
    contactPeople = new ContactPeople(contactId);
    // contactPeople = new ContactPeople(contactId, version);
    contactPeople.setRawContactId(cursor.getString(cursor.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)));
    }
    // contactPeople.setVersion(version);
    name = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
    if(!name.equals(contactPeople.getName())){
    contactPeople.setName(name);
    if(!firstLoad){
    String[] spells = CnSpell.cnToSpellComparable(contactPeople.getName());
    contactPeople.setFullSpell(spells[0]);
    contactPeople.setCompareString(spells[1]);
    }
    }
    contactPeople.clearPhones();
    contactPeople.clearGroups();

    retrievePhone = true;

    setPhoneAndGroup(contactPeople, cursor);
    // }
    // else{
    // for(int i=0; i<contactPeople.getGroups().size(); i++){
    // ContactGroup newGroup = groupCache.get(contactPeople.getGroups().get(i).getId());
    // contactPeople.getGroups().remove(i--);
    // if(newGroup != null){
    // contactPeople.getGroups().add(++i, newGroup);
    // newGroup.addContactPeople(contactPeople);
    // }
    // }
    // }
    contactTemp.put(contactId, contactPeople);
    }else if(retrievePhone){
    setPhoneAndGroup(contactPeople, cursor);
    }
    }
    }finally{
    cursor.close();
    }

    contactCache.clear();
    contactCache.putAll(contactTemp);
    contactTemp.clear();
    }

    private static void setPhoneAndGroup(ContactPeople contactPeople, Cursor cursor) {
    String mimetype = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
    if(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE.equals(mimetype)){
    String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    int type = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
    int primary = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.IS_PRIMARY));
    String custom; //自定义类型
    if(type == ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM){
    custom = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA3));
    }else{
    custom = "";
    }
    contactPeople.addPhone(new ContactPeople.Phone(number, type, primary, custom));
    }else if(ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE.equals(mimetype)){ }
    }code]
      

  4.   

    凭什么不能编辑呢,重发一遍:
    private static final String[] projection = {
    ContactsContract.Data.CONTACT_ID,
    ContactsContract.Data.RAW_CONTACT_ID,
    ContactsContract.RawContacts.VERSION, 
    ContactsContract.Data.DISPLAY_NAME,
    ContactsContract.Data.MIMETYPE,
    ContactsContract.CommonDataKinds.Phone.NUMBER,
    ContactsContract.CommonDataKinds.Phone.TYPE,
    ContactsContract.CommonDataKinds.Phone.IS_PRIMARY, 
    ContactsContract.CommonDataKinds.Phone.DATA3};
    private static final String orderBy = ContactsContract.Data.CONTACT_ID;
    public static void getContacts(ContentResolver contentResolver){
    Cursor cursor = contentResolver.query(
    ContactsContract.Data.CONTENT_URI, 
    projection, null, null, orderBy);
    try{
    String contactIdCurrent = null;
    String contactId = null;
    // int version;
    String name;
    ContactPeople contactPeople = null;

    boolean retrievePhone = false;

    while(cursor.moveToNext()){
    contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID));
    if(!contactId.equals(contactIdCurrent)){
    contactIdCurrent = contactId;
    retrievePhone = false;
    contactPeople = contactCache.get(contactId);
    // version = cursor.getInt(cursor.getColumnIndex(ContactsContract.RawContacts.VERSION));
    // if(contactPeople == null || contactPeople.getVersion() < version){
    if(contactPeople == null){
    contactPeople = new ContactPeople(contactId);
    // contactPeople = new ContactPeople(contactId, version);
    contactPeople.setRawContactId(cursor.getString(cursor.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)));
    }
    // contactPeople.setVersion(version);
    name = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
    if(!name.equals(contactPeople.getName())){
    contactPeople.setName(name);
    if(!firstLoad){
    String[] spells = CnSpell.cnToSpellComparable(contactPeople.getName());
    contactPeople.setFullSpell(spells[0]);
    contactPeople.setCompareString(spells[1]);
    }
    }
    contactPeople.clearPhones();
    contactPeople.clearGroups();

    retrievePhone = true;

    setPhoneAndGroup(contactPeople, cursor);
    // }
    // else{
    // for(int i=0; i<contactPeople.getGroups().size(); i++){
    // ContactGroup newGroup = groupCache.get(contactPeople.getGroups().get(i).getId());
    // contactPeople.getGroups().remove(i--);
    // if(newGroup != null){
    // contactPeople.getGroups().add(++i, newGroup);
    // newGroup.addContactPeople(contactPeople);
    // }
    // }
    // }
    contactTemp.put(contactId, contactPeople);
    }else if(retrievePhone){
    setPhoneAndGroup(contactPeople, cursor);
    }
    }
    }finally{
    cursor.close();
    }

    contactCache.clear();
    contactCache.putAll(contactTemp);
    contactTemp.clear();
    }

    private static void setPhoneAndGroup(ContactPeople contactPeople, Cursor cursor) {
    String mimetype = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
    if(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE.equals(mimetype)){
    String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    int type = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
    int primary = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.IS_PRIMARY));
    String custom; //自定义类型
    if(type == ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM){
    custom = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA3));
    }else{
    custom = "";
    }
    contactPeople.addPhone(new ContactPeople.Phone(number, type, primary, custom));
    }else if(ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE.equals(mimetype)){ }
    }