Android : 未从联系人列表中获取任何联系人
Android : Not getting any contacts from contact list
我正在通过
成功获取联系人
val cursor = context.contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
但是当我的联系人列表中没有任何联系人并且我在 google 帐户 中添加联系人时会出现问题 web end ,在我从这个 xxx@gmail 帐户同步我 phone 中的联系人后,所有联系人 在我的联系人列表中显示,但是当我尝试获取联系人时,它returns 0.
我不知道是什么问题,还有其他方法可以获取此联系人!
如果我插入新的联系人而不是我从上面 查询 得到的联系人,但是找不到我在 网络面板 [=] 中添加的那些联系人35=] 使用 google 帐户.
如果您遇到此类问题,请帮助我。
我正在使用以下代码获取联系人
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())
}
您可以像下面这样使用:
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();
希望对你有所帮助
我从@Rakesh 的回答中解决了我的问题,以便在 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()
我正在通过
成功获取联系人 val cursor = context.contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
但是当我的联系人列表中没有任何联系人并且我在 google 帐户 中添加联系人时会出现问题 web end ,在我从这个 xxx@gmail 帐户同步我 phone 中的联系人后,所有联系人 在我的联系人列表中显示,但是当我尝试获取联系人时,它returns 0.
我不知道是什么问题,还有其他方法可以获取此联系人!
如果我插入新的联系人而不是我从上面 查询 得到的联系人,但是找不到我在 网络面板 [=] 中添加的那些联系人35=] 使用 google 帐户.
如果您遇到此类问题,请帮助我。
我正在使用以下代码获取联系人
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())
}
您可以像下面这样使用:
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();
希望对你有所帮助
我从@Rakesh 的回答中解决了我的问题,以便在 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()