从用户手机获取联系人

时间:2014-11-25 12:07:13

标签: android firebase contacts android-contacts data-retrieval

我正在使用firebase(用于后端)开发一个简单的Messenger应用程序。我希望将用户的联系人电话号码与我数据库中存储的联系电话号码进行比较,以便用户可以查看精确的联系人列表。我在谷歌中查了一下,但我找不到将数字存储在单独变量中的方法。我在堆栈溢出的另一个帖子中尝试了下面的代码但是我在getactivity上收到错误,说“无法解析方法”

        ContentResolver cr = getActivity().getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                            new String[]{id}, null);
                    while (pCur.moveToNext()) {
                        int phoneType = pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                        String phoneNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        switch (phoneType) {
                            case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                                Log.e(name + "(mobile number)", phoneNumber);
                                break;
                            case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                                Log.e(name + "(home number)", phoneNumber);
                                break;
                            case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                                Log.e(name + "(work number)", phoneNumber);
                                break;
                            case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER:
                                Log.e(name + "(other number)", phoneNumber);
                                break;
                            default:
                                break;
                        }
                    }
                    pCur.close();
                }
            }


        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

1 个答案:

答案 0 :(得分:2)

最有可能的是,如果你在Activity中使用该代码而不是我认为不需要getActivity(),你可以直接调用getContentResolver()但是如果仍然没有工作,那么试试这个以获取联系人和其他细节。我正在从我的一个项目中复制代码,所以希望你能理解

 ArrayList<DeviceContacts> contactsList = new ArrayList<DeviceContacts>();
    Cursor cur = getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {

            // read id
            String id = cur.getString(cur
                    .getColumnIndex(ContactsContract.Contacts._ID));
            /** read names **/
            displayName = null;
            displayName = cur
                    .getString(cur
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            /** read image uri's **/
            imageuri = null;
            imageuri = cur
                    .getString(cur
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));

            /** Phone Numbers **/
            Cursor pCur = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                            + " = ?", new String[] { id }, null);
            number = null;
            typeStr = null;
            while (pCur.moveToNext()) {

                number = pCur
                        .getString(pCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                typeStr = pCur
                        .getString(pCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                Log.i("ContactsList", "Contact number :" + number);
                Log.i("ContactsList", "Number type :" + typeStr);

            }
            pCur.close();
            /** EMAIL **/
            Cursor emailCur = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                    null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID
                            + " = ?", new String[] { id }, null);

            email = null;

            while (emailCur.moveToNext()) {
                email = emailCur
                        .getString(emailCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

            }

            DeviceContacts dContacts = new DeviceContacts(); // simple model class
            dContacts.setDisplayName(displayName);
            dContacts.setmNumber(number);
            dContacts.setEmail(email);
            dContacts.setImageUri(imageuri);
            contactsList.add(dContacts); 

            emailCur.close();

        }
    }
    cur.close();

希望这可以提供帮助