2016-04-07 38 views
1

在我的光標查詢該選擇條款只返回那些誰有一個電話號碼,這正是我想要的聯繫人:如何獲取我的通訊錄中相應姓名的電話號碼?

// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0) 
       ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", 

我的整個遊標查詢看起來是這樣的:

// this query only return contacts with phone number and is not duplicated 
     phones = getContentResolver().query(
//    the table to query 
       ContactsContract.Contacts.CONTENT_URI, 
//    the columns to return 
       null, 
//    selection criteria : 
// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0) 
       ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", 
//    selection criteria 
       null, 
//    display in ascending order 
       ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

卻怎麼也我爲每個聯繫人獲得實際的電話號碼?我可以在上面的代碼中添加一些東西,還是需要啓動一個新的Cursor查詢?

我認爲這是後者。

我開始了新的遊標查詢爲出發點:

phonestwo = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + "=1", 
          null, 
          null); 

但在日誌中的logcat我收到手機光標有134個記錄(正確的,我想要的!),我的phonestwo光標196記錄。總之,如何獲得與這134條記錄相對應的電話號碼?

回答

0
public class MainActivity extends Activity { 


    Cursor cursor; 
    ListView mainListView; 
    ArrayList hashMapsArrayList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (cursor != null) { 
      cursor.moveToFirst();} 
     try { 

      cursor = getApplicationContext().getContentResolver() 
        .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
      int Idx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); 
      int nameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

      int phoneNumberIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      int photoIdIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI); 
      cursor.moveToFirst(); 


      Set<String> ids = new HashSet<>(); 
      do { 
       System.out.println("=====>in while"); 
       String contactid=cursor.getString(Idx); 
       if (!ids.contains(contactid)) { 
        ids.add(contactid); 
        HashMap<String, String> hashMap = new HashMap<String, String>(); 
        String name = cursor.getString(nameIdx); 
        String phoneNumber = cursor.getString(phoneNumberIdx); 
        String image = cursor.getString(photoIdIdx); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Number--->"+phoneNumber); 

        if (!phoneNumber.contains("*")) { 
         hashMap.put("contactid", "" + contactid); 
         hashMap.put("name", "" + name); 
         hashMap.put("phoneNumber", "" + phoneNumber); 
         hashMap.put("image", "" + image); 
         // hashMap.put("email", ""+email); 
         if (hashMapsArrayList != null) { 
          hashMapsArrayList.add(hashMap);} 
//     hashMapsArrayList.add(hashMap); 
        } 
       } 

      } while (cursor.moveToNext()); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
} 
} 
1

要獲取與聯繫人相關聯的電話號碼,您需要再次點擊聯繫人內容提供商。

先問phones光標聯繫人的ID -

String phoneContactId = phones.getString(phones.getColumnIndexOrThrow(BaseColumns._ID)); 

然後爲每個phoneContactId,您獲取所有與其相關的電話號碼 -

Cursor pCur = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { phoneContactId }, null); 

while (pCur.moveToNext()) { 
        int phoneType = pCur.getInt(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.TYPE)); 
        String phoneNumber = pCur 
          .getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

       } 
相關問題