【问题标题】:How to build an app that shows my contacts phone number如何构建一个显示我的联系人电话号码的应用程序
【发布时间】:2015-12-24 08:13:46
【问题描述】:

我最近构建了一个显示我的联系人姓名的应用程序,但问题是我想显示他们的电话号码而不是他们的姓名。以下是我的代码,可以很好地显示联系人姓名

   public class Main extends ActionBarActivity implements View.OnClickListener {
TextView tv ;
Button Action ;
String name ;
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     tv = (TextView) findViewById(R.id.textView) ;
     Action = (Button) findViewById(R.id.button) ;
     Action.setOnClickListener(this );
 }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case (0) :
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor c =  getContentResolver().query(contactData,
                        null,null
                        ,null, null);
                if (c.moveToFirst()) {
                    name = "" ;
                    name = c.getString(c.getColumnIndex(ContactsContract
                            .Contacts.DISPLAY_NAME));
                    // TODO Whatever you want to do with the selected contact name.
                    tv.setText("");
                    tv.setText(name);
                }
            }
            break;
    }

}

【问题讨论】:

    标签: android android-studio android-contacts


    【解决方案1】:

    一个联系人可以有多个电话号码,所以我们必须在光标中获取电话号码然后对其进行迭代。所以像下面这样编辑你的代码它将起作用

    if (resultCode == Activity.RESULT_OK) {
      Uri contactData = data.getData();
      Cursor c =  getContentResolver().query(contactData,
                        null,null
                        ,null, null);    
       if (c.moveToFirst()) {
    
          String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
          String id =c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
          String hasPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
    
          if (hasPhone.equalsIgnoreCase("1")) {
    
                 Cursor phones = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id,
                            null, null);
                 phones.moveToFirst();
                 String phoneNumber = phones.getString(phones.getColumnIndex("data1"));
                 System.out.println("number is:" + cNumber);
           }
    
            Log.d(this.getClass().getName(), "Selected " + name);
       }
    }
    

    【讨论】:

      【解决方案2】:

      我已经结束了从 Android 手机中检索最快解决方案的搜索。 ContactDTO 是 pojo 类。

      它会以“联系人显示名称”的升序返回结果。

          public static List<ContactDTO> getPhone(Context context){
                  List<ContactDTO> contactList = new ArrayList<ContactDTO>();
                  ContentResolver cr = context.getContentResolver(); 
                  String[] PROJECTION = new String[] { 
                          ContactsContract.RawContacts._ID, 
                          ContactsContract.Contacts.DISPLAY_NAME,
                          ContactsContract.CommonDataKinds.Phone.PHOTO_URI,
                          ContactsContract.CommonDataKinds.Phone.NUMBER,
                          ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
      
                  Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
                  String filter = ""+ ContactsContract.Contacts.HAS_PHONE_NUMBER + " > 0 and " + Phone.TYPE +"=" + Phone.TYPE_MOBILE;     
                  String order = ContactsContract.Contacts.DISPLAY_NAME + " ASC";// LIMIT " + limit + " offset " + lastId + "";
      
                  Cursor phoneCur = cr.query(uri, PROJECTION, filter, null, order);
                  while(phoneCur.moveToNext()){
                       ContactDTO dto = new ContactDTO();
                       dto.setName("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
                       dto.setMobileNo("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                       dto.setPhotoUrl("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)));
                       dto.setContactId("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Photo.CONTACT_ID)));
                       contactList.add(dto);
                   }
                   phoneCur.close();
                  return contactList;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-11
        • 2017-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-08
        相关资源
        最近更新 更多