列出Android中群组中的联系人

问题描述

我正在尝试列出联系人(姓名+手机号码)。 以下是我使用的实际代码

    private void listContactLookupKey() {
        final String[] PROJECTIONS = {
            ContactsContract.Contacts._ID,ContactsContract.Contacts.LOOKUP_KEY,Build.VERSION.SDK_INT
                >= Build.VERSION_CODES.HONEYCOMB ?
                ContactsContract.Contacts.disPLAY_NAME_PRIMARY :
                ContactsContract.Contacts.disPLAY_NAME,ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
        };
        final String SELECTION =
            ContactsContract.Data.MIMETYPE  + " = '"
            + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'"
            + " AND " +
            ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " = "
            + 48;

        Cursor c = mContentResolver.query(
            ContactsContract.Data.CONTENT_URI,PROJECTIONS,SELECTION,null,null
        );
        mLookupKeys = new ArrayList<String>( c.getCount() );
        for(c.movetoFirst(); ! c.isAfterLast(); c.movetoNext()) {
            android.util.Log.i("CONTACTS","_ID=" + c.getLong(0) +","+
                "LOOKUP_KEY=" + c.getString(1) +","+
                "NAME="+c.getString(2) +","+
                "GROUP_ROW_ID=" + c.getLong(3)
            );
            mLookupKeys.add(c.getString(1));
        }
    }
    private void listContactsInGroup() {
        final String[] PROJECTIONS = {
            ContactsContract.Contacts._ID,ContactsContract.CommonDataKinds.Phone.norMALIZED_NUMBER,ContactsContract.Contacts.LOOKUP_KEY
        };
        StringBuilder argBuilder = new StringBuilder();
        for(int i=0; i<mLookupKeys.size(); i++) {
            argBuilder.append("'" + mLookupKeys.get(i) + "'");
            if( i < mLookupKeys.size()-1 )
                argBuilder.append(",");
        }
        android.util.Log.i("CONTACT","arg= "+argBuilder.toString());
        String SELECTION =
            ContactsContract.Data.MIMETYPE + " = '"
            + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
            + "' AND " +
            ContactsContract.CommonDataKinds.Phone.TYPE + " = '"
            + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE
            + "' AND " +
            ContactsContract.Contacts.LOOKUP_KEY + " IN ("+argBuilder.toString()+")";

        String[] arg = {argBuilder.toString() };
        Cursor c = mContentResolver.query(
            ContactsContract.Data.CONTENT_URI,null
        );
        for(c.movetoFirst(); ! c.isAfterLast(); c.movetoNext()) {
            android.util.Log.i("CONTACTS","NAME="+c.getString(1) +","+
                "norMALIZED_NUMBER=" + c.getString(2) +","+
                "LOOKUP_KEY=" + c.getString(3)
            );
        }
    }

    @Override
    public void run() {
        listContactLookupKey();
        listContactsInGroup();
    }

两个问题: 首先,我得到一个包含多次相同数字的列表,如:

"Germain D." "+33......"
"Germain D." "+33......"
"Other Person" "12356"

可能是由于多个帐户出现了相同的号码(Google,Whatsapp等)

第二,代码似乎太长了。我是否缺少执行此操作的快捷方式?

我阅读了有关Contact Provider的Android开发人员主题,很难理解。 https://developer.android.com/guide/topics/providers/contacts-provider 根据表的结构,目标是首先将联系人的LOOKUP_KEY分组,然后再获取联系人名称和手机号码,首先要获取LOOKUP_KEYs。

请问有人可以帮助我吗?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)