【问题标题】:Android - cant get phone number of some contactsAndroid - 无法获取某些联系人的电话号码
【发布时间】:2012-08-15 02:31:30
【问题描述】:

我在提取联系人列表中某些人的电话号码时遇到问题。

首先我在列表视图中显示所有联系人:

String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER
    };

mCursor = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            projection, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] {mContactId}, null);

当点击一个项目时,这就是我获取contact_id的方式:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
        Cursor currentCursor = mContactsAdapter.getCursor();

    if (currentCursor != null) {
        notifyOnContactSelectedListeners(String.valueOf(id));
    }
}

然后我创建一个新片段,并在加载它时查询联系人的电话和显示名称:

if (cursor != null && cursor.getCount() > 0) {

        cursor.moveToFirst();

        String firstName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }

所以对于一些有电话的人,我可以通过这种方式获取电话号码,这没关系。 但对于某些人来说,我无法通过这种方式获取电话号码 - 但他们在默认的电话通讯录中确实有电话号码。

出了什么问题?

【问题讨论】:

    标签: android android-contacts phone-number contactscontract


    【解决方案1】:

    我也有类似的困难。我发现我无法收到的号码都是从我链接的 Facebook 帐户中导入的。您将能够检测到联系人存在,并且确实他们有电话号码。但是,当您尝试使用 SQL 查询检索所述数字时,返回的结果将是 null

    据了解,Facebook 出于安全原因限制了对其联系人的访问。我还没有找到隐藏电话号码的其他提供商(例如 LinkedIn、Google)。

    延伸阅读:Cannot find Facebook contacts in RawContacts

    【讨论】:

    • 合并或链接帐户后,它可能会成为Facebook帐户?
    【解决方案2】:

    试试这个可能对你有用

    public class Contact extends Activity 实现 OnItemClickListener{

    private static final int PICK_CONTACT = 0;
    Cursor c;
    Cursor cursor,phones,emails,address;
    String id,phoneNo,name;
    String[] from;
    int[] to;
    ListView lv;
    Cursor cur,pCur;
    List<String> list1 = new ArrayList<String>();
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.contact);
      lv = (ListView)findViewById(R.id.contactlist);
      displayContacts();
      lv.setAdapter(new ArrayAdapter<String>(this,
              android.R.layout.simple_list_item_1, list1)); 
      lv.setOnItemClickListener(this);
    }
    
    private void displayContacts() {
    
        ContentResolver cr = getContentResolver();
       cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                 name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                      pCur = cr.query(
                             ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                             null, 
                             ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                             new String[]{id}, null);
                     while (pCur.moveToNext()) {
                         phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                     // setContact(name,phoneNo);
                         System.out.println("name"+name+"ph no"+phoneNo);
                         list1.add(name+"\n"+phoneNo);
                //       Toast.makeText(this, "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_SHORT).show();
    
    
                     } 
    
                pCur.close();
              }
            }
        }
    
    
    
    
    }
    
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub
        String s = lv.getItemAtPosition(arg2).toString();
    
        Log.i("my msg", s.substring(0, s.indexOf("\n")));
    
        Toast.makeText(this, s.substring(s.indexOf("\n")+1,s.length() ),1 ).show();
    }  
    

    }

    【讨论】:

      【解决方案3】:

      我在一些联系人中收到了null

      我验证了我的代码,发现在查询电话号码时我使用的是ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,然后我改为ContactsContract.CommonDataKinds.Phone.NUMBER,根据android docs它说。

      用户输入的电话号码。

      而且代码运行良好。

      【讨论】:

      • 你的前后看起来一模一样?
      • 谢谢@Bink,我很难找到正确的值,幸运的是我从文档中复制了描述。
      猜你喜欢
      • 2013-02-18
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      相关资源
      最近更新 更多