代码之家  ›  专栏  ›  技术社区  ›  Mohit Suthar

Android:无法从联系人列表中获取任何联系人

  •  0
  • Mohit Suthar  · 技术社区  · 6 年前

    我正在通过成功获取联系人

     val cursor = context.contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
    

    但是,当我的联系人列表中没有任何联系人,并且我正在添加联系人时,就会出现问题 谷歌账户 从…起 web端 在我的手机中同步联系人 由此 ,所有联系人 在我的联系人列表中,但当我试图 取得联系 然后呢, 返回0 .

    我不知道是什么问题,有任何其他方法来获取此联系人!

    如果我插入新联系人,则我从上面获得此联系人 查询 ,但找不到我添加的联系人 网络面板 .

    我正在使用以下代码获取联系人

    val cursor = context.contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
        val projection = arrayOf(ContactsContract.Contacts._ID, ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.PHOTO_URI, ContactsContract.CommonDataKinds.Phone.TYPE)
        val alContacts = ArrayList<Contact>()
        var mMapContact = JSONObject()
        if (cursor!!.moveToFirst()) {
            do {
                val id = cursor!!.getString(cursor!!.getColumnIndex(ContactsContract.Contacts._ID))
                if (Integer.parseInt(cursor!!.getString(cursor!!.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    val pCur = context.contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", arrayOf<String>(id), ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC")
                    var mListMobile = ArrayList<MobileType>()
                    var mNameContact = ""
                    while (pCur!!.moveToNext()) {
                        val number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                        mNameContact = pCur!!.getString(pCur!!.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))
                        val type = pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))
                        when (type) {
                            ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE -> {
                                mListMobile.add(MobileType(number, 0))
                                mMapContact.put(number.replace(Regex(CONTACT_PLUS_PATH_PREFIX), ""), mNameContact)
                            }
                            ContactsContract.CommonDataKinds.Phone.TYPE_HOME -> {
                                mListMobile.add(MobileType(number, 1))
                                mMapContact.put(number.replace(Regex(CONTACT_PLUS_PATH_PREFIX), ""), mNameContact)
                            }
                            ContactsContract.CommonDataKinds.Phone.TYPE_WORK -> {
                                mListMobile.add(MobileType(number, 2))
                                mMapContact.put(number.replace(Regex(CONTACT_PLUS_PATH_PREFIX), ""), mNameContact)
                            }
                        }
                        /*val contactNumber = pCur!!.getString(pCur!!.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                        val contactName = pCur!!.getString(pCur!!.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))
                        val contactInfo = ContactInfo(""+id, ""+contactName, "", ""+contactNumber)
                        LogUtil.e(TAG, "getContactList: $contactNumber - $contactName - $id")
                        alContacts.add(contactInfo)
                        break*/
                    }
                    pCur?.close()
                    if(mListMobile.size > 0) {
                        var contact : Contact? = null
                        for (mobile in mListMobile) {
                            contact = Contact(id, "" + mNameContact, ""+mNameContact, false, null, ""+mobile.mobile, "", mobile.type)
                            alContacts.add(contact!!)
                        }
                    }
                }
            } while (cursor?.moveToNext())
        }
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Mohit Suthar    6 年前

    我通过@Rakesh answer解决了我的问题,以便在kotlin中获得更好的效果,您可以这样使用

    val projection = arrayOf(ContactsContract.Data.MIMETYPE, ContactsContract.Data.CONTACT_ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_URI, ContactsContract.Contacts.STARRED, ContactsContract.RawContacts.ACCOUNT_TYPE, ContactsContract.CommonDataKinds.Contactables.DATA, ContactsContract.CommonDataKinds.Contactables.TYPE)
    
            val selection = ContactsContract.Data.MIMETYPE + " in (?, ?)" + " AND " +
                    ContactsContract.Data.HAS_PHONE_NUMBER + " = '" + 1 + "'"
    
            val selectionArgs = arrayOf(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
    
            val sortOrder = ContactsContract.Contacts.SORT_KEY_ALTERNATIVE
    
            val uri = ContactsContract.CommonDataKinds.Contactables.CONTENT_URI
    
            val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
    
            val mimeTypeIdx = cursor!!.getColumnIndex(ContactsContract.Contacts.Data.MIMETYPE)
            val idIdx = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID)
            val nameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)
    
            val dataIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.DATA)
            val typeIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.TYPE)
            val photo = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.PHOTO_URI)
            val account_type = cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE)
    
            while (cursor.moveToNext()) {
                var mListMobile = ArrayList<MobileType>()
    
                val id = cursor.getLong(idIdx)
                val type = cursor.getInt(typeIdx)
                val number = cursor.getString(dataIdx)
                val mimeType = cursor.getString(mimeTypeIdx)
                val mNameContact = cursor.getString(nameIdx)
                val photo_uri = cursor.getString(photo)
                val account_t = cursor.getString(account_type)
    
    
                when (type) {
                    ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, 0 -> {
                         Log.i(TAG, ""+number) 
                    }
                    ContactsContract.CommonDataKinds.Phone.TYPE_HOME -> {
                        Log.i(TAG, ""+number) 
                    }
                    ContactsContract.CommonDataKinds.Phone.TYPE_WORK -> {
                        Log.i(TAG, ""+number) 
                    }
                }
            }
            cursor.close()
    
        2
  •  2
  •   ॐ Rakesh Kumar    6 年前

    您可以像下面这样使用:

    String[] projection = {
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.Data.CONTACT_ID,
                            ContactsContract.Contacts.DISPLAY_NAME,
                            ContactsContract.Contacts.PHOTO_URI,
                            ContactsContract.Contacts.STARRED,
                            ContactsContract.RawContacts.ACCOUNT_TYPE,
                            ContactsContract.CommonDataKinds.Contactables.DATA,
                            ContactsContract.CommonDataKinds.Contactables.TYPE
                    };
    
    
    
                    String selection = ContactsContract.Data.MIMETYPE + " in (?, ?)" + " AND " +
                            ContactsContract.Data.HAS_PHONE_NUMBER + " = '" + 1 + "'";
    
                    String[] selectionArgs =
                            {
                                    ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
                            };
                    String sortOrder = ContactsContract.Contacts.SORT_KEY_ALTERNATIVE;
    
    
    
                    Uri uri = null;
                    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
                        uri = ContactsContract.CommonDataKinds.Contactables.CONTENT_URI;
                    }
                    else
                    {
                        uri = ContactsContract.Data.CONTENT_URI;
    
                    }
    
    
                    Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
    
                    final int mimeTypeIdx = cursor.getColumnIndex(ContactsContract.Contacts.Data.MIMETYPE);
                    final int idIdx = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
                    final int nameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                    Log.e("Contacts----", "ontacts__nameIdx----" + nameIdx);
                    final int dataIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.DATA);
                    final int typeIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.TYPE);
                    final int photo = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.PHOTO_URI);
                    final int account_type = cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE);
                    sb = new StringBuilder();
                    while (cursor.moveToNext()) {
                        long id = cursor.getLong(idIdx);
    
                        int type = cursor.getInt(typeIdx);
                        String data = cursor.getString(dataIdx);
                        String mimeType = cursor.getString(mimeTypeIdx);
                        String photo_uri = cursor.getString(photo);
                        String account_t = cursor.getString(account_type);
    
                        Log.e("Contacts----", "Contacts__----" + nameIdx+"---"+type+"---"+data+"----"+id);
                        if (mimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
    
                            /**For email  **/
                            Log.e("Contacts----","Contacts__>>"+type+"---data---"+data+"--id--"+id);
    
                        } else {
                            //
                            Log.e("Contacts-----","Contacts__else>>"+type+"---data---"+data+"--id--"+id);
    
                        }
                    }
    
                    cursor.close();
    

    希望对你有帮助。