- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了这个函数来检索 android 手机中的联系人:
public static HashMap<String, Contact> getAllContacts(Context context) {
HashMap<String, Contact> contactsList = new HashMap<>();
if(!contactsReadPermission(context))
return contactsList;
DateTime timestamp = DateTime.now();
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.SORT_KEY_PRIMARY + " ASC");
if (cursor != null) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER));
if (phoneNumber == null)
continue;
contactsList.put(phoneNumber, new Contact(name, phoneNumber, timestamp.toString()));
}
phoneCursor.close();
}
}
cursor.close();
}
return contactsList;
}
这段代码在除小米手机外的所有安卓设备上都可以正常工作。我认为这可能是 MIUI 设备的问题。
当我在 MIUI ROM 上运行时,此函数返回空 HashMap 。
最佳答案
最好的事情是它会给你所有唯一的联系方式,附加国家代码
对于 kotlin 你可以像下面这样使用它
fun fetchContacts(context: Context): Set<ContactModel> {
val list = HashSet<ContactModel>()
val startnow: Long = android.os.SystemClock.uptimeMillis()
val util = PhoneNumberUtil.getInstance()
val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val countryCodeValue = tm.networkCountryIso.toUpperCase()
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.Contacts.IN_VISIBLE_GROUP + " = '" + 1 + "' 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
var 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
}
// we could also use Uri uri = ContactsContract.Data.CONTENT_URI;
// we could also use Uri uri = ContactsContract.Contact.CONTENT_URI;
val cursor = context.contentResolver.query(uri!!, projection, selection, selectionArgs, sortOrder)
val mimeTypeIdx = cursor!!.getColumnIndex(ContactsContract.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 photo = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.PHOTO_URI)
val typeIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.TYPE)
val account_type = cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE)
while (cursor.moveToNext()) {
val contact_id = cursor.getInt(idIdx)
val photo_uri = cursor.getString(photo)
val contact_name = cursor.getString(nameIdx)
val contact_acc_type = cursor.getString(account_type)
val contact_type = cursor.getInt(typeIdx)
val contact_data = cursor.getString(dataIdx)
val Contact_mimeType = cursor.getString(mimeTypeIdx)
if (Contact_mimeType == ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) {
try {
val number = util.parse(contact_data, countryCodeValue)
val model = ContactModel()
model.id = contact_id.toString()
model.name = contact_name
model.mobileNumber = "${number.countryCode}${number.nationalNumber}"
// model.mobileNumber = contact_data
model.photoURI = photo_uri
list.add(model)
// Log.e("Number", contact_data)
} catch (e: Exception) {
showlog(TAG, Log.getStackTraceString(e))
}
}
}
cursor.close()
val endnow: Long = android.os.SystemClock.uptimeMillis()
showlog(TAG, "TimeForContacts " + (endnow - startnow) + " ms of size " + list.size)
return list
}
在此 google phonelibnumber 中使用
implementation 'com.googlecode.libphonenumber:libphonenumber:8.9.5'
Pojo 或数据类
data class ContactModel(
var id: String = "",
var name: String = "",
var mobileNumber: String = "",
var photo: Bitmap? = null,
var photoURI: String? = "",
var showContactInitial: Boolean = false,
var connected: Boolean = false,
var userid: String = "",
var request_status: String = "",
var hasBtwixt: Boolean = false,
var createdby: String = "",
var image: String = "",
var request_id:String = ""
)
关于android - 无法读取 MIUI 中的联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53812751/
对于我的应用程序的一部分,我需要在选择该选项时显示所有联系人的列表(带有电话号码)。 这是按下按钮时调用的 Activity : package com.example.prototype01; im
我正在尝试使用 Google Contact API (C#) 将“生日”值添加到 Google Contact。谁能帮我解决这个问题。 我正在使用 Google 数据 API 设置 (1.4.0.2
如何使用 Google Contact API (c#) 在 Google Contact 中创建新的“自定义字段”? 我用过: ExtendedProperty obj_ExtendedProper
我正在 iPhone 应用程序中使用地址簿框架,并且我想获取项目公司名称。我在 AddressBookUI_Framework.pdf 中找不到此信息,有人可以解释一下吗? 问候 AddressBoo
我正在开发一个数据库来管理一家小公司的客户数据。客户是公司和机构(学校等),当然还有人/联系人。会有更多的范围及时添加,但现在我正在寻找关于核心设计本身的任何输入,如果有任何我在这里遗漏的东西可能会导
我正在使用 Swift Contacts 并尝试确定是否可以将 contacts.phoneNumbers 转换为 NSDictionary?即可以通过以下方式在 contacts.phoneNumb
我想要我的联系人的 ListView。我使用谷歌示例代码。问题是我一遍又一遍地获得相同的联系人: 吉姆 吉姆 吉姆 吉姆 吉姆 安娜 安娜 安娜 安娜 ... 如何获得我的联系人的 DISTINCT
对于我的应用程序,我需要导入 Gmail 地址簿,我可以按照“Gmail Contact API”进行操作。 最近 Gmail 添加了一些不属于 xml 的新字段(即生日、网站等)。 gmail ap
在 NetSuite 中编辑记录时,我有一个按钮需要能够获取所有联系人的名字、姓氏、电子邮件和可能的 Angular 色,以便我可以将其附加到我已经编写的其他代码中。我似乎无法弄清楚如何提取与记录关联
我们需要一种使用 Delphi/Pascal 代码读取(并且可以选择写入).vcf 文件的方法。带有源代码的免费库将是完美的。 最佳答案 AceVCard是delphi 2009的免费开放组件,兼容V
我正在模拟一个电话簿,其中有 ArrayList 。如何覆盖toString()函数为了拥有像这样的东西,我们正在做 System.out.println(phonebook) ? Name: nam
我正在尝试构建一个搜索 XML 表达式以与 Java 中的 Exchange Web 服务一起使用。我试图实现的是我可以通过电子邮件地址搜索所有联系人。我已经浏览了他们的文档,但未能使其正常工作。这是
我有一个项目正在进行,我想自动发送 SMS,并有时间和日期将 SMS 推送给特定的联系人。那么如何以简洁高效的方式从手机中提取联系人呢?基本上我希望用户按下一个按钮,然后应用程序转到联系人列表,然后用
我有一个表格 View ,显示所有联系人都使用 RealmSwift。如何使用谓词按电话号码过滤 Realm 联系人? class Contact: Object { @obj
我正在尝试使用 CNContactVCardSerialization 将联系人保存为 vcf,效果相对较好。我确实发现苹果不包含注释或图像作为 VCF 的一部分。我确实使用了 stackoverfl
我正在读取手机中的所有联系人,如下所示: Cursor cursor = MainApp.get().getContentResolver().query( C
我有具有 list 权限的应用程序 我的 Activity 尝试加载联系人: eDeviceRecordsLoader contactsLoader = new eDeviceRec
我正在尝试编辑组标题和注释, 编辑标题适用于系统组 和用户创建的组, 虽然注释列只有在系统组(例如“联系人”、“ friend ”、“家庭”、“同事”)时才会保留,我假设它不会为用户创建的组保存注释,
在我的应用中,我想将联系人与其他数据相关联。对联系人的引用必须尽可能持久,否则关联的数据将变成垃圾。 首先,我应该使用 ContactsContract.Contact.LOOKUP_KEY 访问聚合
我正在做一个应用程序,因为我显示从设备到 ListView 的所有联系人(姓名、号码、图像)。我想使用工具栏搜索从 ListView 中搜索联系人。我添加了工具栏搜索,但我不知道如何从列表中过滤联系人
我是一名优秀的程序员,十分优秀!