【问题标题】:Retrieve phone number from contacts in android从android中的联系人中检索电话号码
【发布时间】:2011-11-18 21:11:32
【问题描述】:

我需要从联系人中获取电话号码,但光标未进入此循环。请帮帮我....

for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor.moveToNext()) {
// Get a phone number
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

Toast.makeText(this, "Phone  =  "+phoneNumber, Toast.LENGTH_LONG).show();

【问题讨论】:

  • 什么是phoneCursor.getCount()?

标签: android android-manifest


【解决方案1】:

使用下面的代码你一定会得到一个电话号码。

ContentResolver cr = getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
        if (cursor.moveToFirst()) {
            String contactId =
                cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            //
            //  Get all phone numbers.
            //
            Cursor phones = cr.query(Phone.CONTENT_URI, null,
                Phone.CONTACT_ID + " = " + contactId, null, null);
            while (phones.moveToNext()) {
                String number = phones.getString(phones.getColumnIndex(Phone.NUMBER));
                int type = phones.getInt(phones.getColumnIndex(Phone.TYPE));
                switch (type) {
                    case Phone.TYPE_HOME:
                       TextView textView=(TextView)findViewById(R.id.textView1);
                       textView.setText(number);
                        break;
                    case Phone.TYPE_MOBILE:
                        // do something with the Mobile number here...
                        break;
                    case Phone.TYPE_WORK:
                        // do something with the Work number here...
                        break;
                    }
            }
            phones.close(); 

【讨论】:

  • @Dhaval Khant:如果联系人中有多个电话号码,您可以更新代码吗?目前,您的代码将获得联系人中的第一个电话号码。提前致谢!
【解决方案2】:

我使用这样的功能: (该函数是从 OnActivityResult 从 Activity 类中调用的:

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
      super.onActivityResult(reqCode, resultCode, data);
      switch (reqCode) {
        case (Constants.REQ_CODE_PICK_CONTACT) :
          if (resultCode == Activity.RESULT_OK) {
          savePickedContact(data, this);                
          }
        break;
      }
}


public static void savePickedContact(Intent data, Activity from){
        Uri contactData = data.getData();
        Cursor contactCur =  from.managedQuery(contactData, null, null, null, null);
        if (contactCur.moveToFirst()) {
            for(int i=0;i<contactCur.getColumnCount();i++){
              String columnName = contactCur.getColumnName(i);
              String value = contactCur.getString(i);
          }
            ContentResolver cr = from.getContentResolver();
            Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                                        null, 
                                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " =?",  
                                        new String[]{contactCur.getString(contactCur.getColumnIndex("_id"))}, 
                                        ContactsContract.CommonDataKinds.Email.IS_PRIMARY + " DESC");
            Boolean hasData = emailCur.moveToFirst();
            while(hasData){
                String  email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                hasData = emailCur.moveToNext();
                }
            GlobalData.pickedContact.put("email_addresses", emails);
            emailCur.close();

            Cursor phonesCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                            null, 
                                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " =?", 
                                            new String[]{contactCur.getString(contactCur.getColumnIndex("_id"))}, 
                                            ContactsContract.CommonDataKinds.Phone.IS_PRIMARY + " DESC");
            hasData = phonesCur.moveToFirst();
            while(hasData){
                String phoneNumber = phonesCur.getString(phonesCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
                hasData = phonesCur.moveToNext();
            }
            phonesCur.close();

            Cursor eventCur = cr.query(Data.CONTENT_URI, 
                    new String[]{ ContactsContract.CommonDataKinds.Event.DATA}, 
                    ContactsContract.CommonDataKinds.Event.CONTACT_ID + " =? AND " + ContactsContract.CommonDataKinds.Event.TYPE + " =" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY +" AND "+ Data.MIMETYPE + " =?", 
                    new String[]{contactCur.getString(contactCur.getColumnIndex("_id")), ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE}, 
                    null);
            hasData = eventCur.moveToFirst();
            if(hasData){                        
                String birthday = "birthday", Utils.dbDateToDisplayDate(eventCur.getString(0));
            }

            Cursor structNameCur = cr.query(Data.CONTENT_URI, 
                    new String[]{ ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME}, 
                    ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " =? AND " + Data.MIMETYPE + " =?", 
                    new String[]{contactCur.getString(contactCur.getColumnIndex("_id")), ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}, 
                    null);
            hasData = structNameCur.moveToFirst();
            if(hasData){                        
                String givenName = structNameCur.getString(0);
                String familyName = "family_name", structNameCur.getString(1);
            }
            structNameCur.close();
        }
      contactCur.close();
}

【讨论】:

    【解决方案3】:

    你可以试试这个:

    ContentResolver cr = getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            "DISPLAY_NAME = '" + NAME + "'", null, null);
        if (cursor.moveToFirst()) {
            String contactId =
                cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            //
            //  Get all phone numbers.
            //
            Cursor phones = cr.query(Phone.CONTENT_URI, null,
                Phone.CONTACT_ID + " = " + contactId, null, null);
            while (phones.moveToNext()) {
                String number = phones.getString(phones.getColumnIndex(Phone.NUMBER));
                int type = phones.getInt(phones.getColumnIndex(Phone.TYPE));
                switch (type) {
                    case Phone.TYPE_HOME:
                        // do something with the Home number here...
                        break;
                    case Phone.TYPE_MOBILE:
                        // do something with the Mobile number here...
                        break;
                    case Phone.TYPE_WORK:
                        // do something with the Work number here...
                        break;
                    }
            }
            phones.close();
    }
    

    是的别忘了在 AndroidManifest.xml 文件中添加 READ_CONTACTS 权限

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2016-08-17
      相关资源
      最近更新 更多