【问题标题】:Views contact details and get phone number selected by user查看联系人详细信息并获取用户选择的电话号码
【发布时间】:2013-09-18 05:54:19
【问题描述】:

我想显示原生的 android 联系人列表,然后一旦用户选择了一个联系人,我想移动到下一个显示联系人详细信息(如电话号码、电子邮件等)的原生屏幕。 现在,一旦用户选择了电子邮件地址或电话号码,我就想将该数据恢复到我的原始活动并进行进一步处理。

我知道我可以使用

startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), REQUEST_CODE_PICK_CONTACT);

然后我自己使用getContentResolver().query() 解析联系人,然后存储每个必填字段。然后最后显示在一个单独的活动中作为联系方式,然后一旦用户选择任何一个电话号码或电子邮件,然后我用它来做进一步的处理。

我尝试在 onActivityResult() 内部执行以下操作:

Uri contactData = data.getData();
                Intent intent = new Intent(Intent.ACTION_PICK, contactData);
                startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT_DETAIL);

这会显示联系人的详细信息,但是当用户选择特定号码时,android 会调用它,而不是在上一个活动中将其传回给我。

但如果可能,我想使用原生屏幕,它需要的解析更少,也不需要额外的活动/片段。

有人可以建议如何去做吗?

谢谢

【问题讨论】:

    标签: android android-contacts contactscontract


    【解决方案1】:

    您可以通过这种方式从电话联系人中获取联系方式

     Uri uri = data.getData();
        String[] projection    = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER};
    
        Cursor people = getActivity().getContentResolver().query(uri, projection, null, null, null);
    
        int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
        int indexNumber = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
      int type = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    
        people.moveToFirst();
        do {
            String name   = people.getString(indexName);
            String number = people.getString(indexNumber);
            System.out.println(name+number);
    
        } while (people.moveToNext());
    

    【讨论】:

      【解决方案2】:

      这可能会有所帮助:

       Uri contactData = data.getData();
                  ContentResolver cr = getContentResolver();
                  Cursor c = cr.query(contactData, null, null, null, null);
                  if (c.moveToFirst()) {
                      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 cNumber = phones
                                  .getString(phones
                                          .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                          Toast.makeText(getApplicationContext(), cNumber,
                                  Toast.LENGTH_SHORT).show();
      
                          String nameContact = c
                                  .getString(c
                                          .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
      
                  // contact number = cNumber
                  //contact name = nameContact
      }
      }
      

      【讨论】:

      • 如果用户从联系人列表中选择一个联系人,这将起作用。它将返回数据,然后我们将按上述方式对其进行解析。我希望有一些东西,以便在用户选择联系人后,流程会转到联系人详细信息页面,然后当用户选择特定电话号码时,它会返回要使用的是我们进一步使用的一些数据
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多