c# - 在 Xamarin 中导入联系人 - 电子邮件返回 null
问题描述
我正在尝试将选定的联系人从电话目录导入我的应用程序。使用下面的代码,联系人姓名和电话号码成功返回,但电子邮件始终返回 null(该if (emailCursor.MoveToFirst())
子句始终返回 false)。ImportedContact 是一个简单的类,具有 3 个字符串属性,名称、电话和电子邮件。我已确保我的联系人已分配电子邮件地址。
static ImportedContact GetContactFromUri(Android.Net.Uri contactUri)
{
var importedContact = new ImportedContact();
try
{
string[] projection =
{
ContactsContract.Contacts.InterfaceConsts.Id,
ContactsContract.Contacts.InterfaceConsts.DisplayName,
ContactsContract.CommonDataKinds.Phone.Number
};
var cursor = CrossCurrentActivity.Current.Activity.ContentResolver.Query(contactUri, projection, null, null, null);
if (cursor.MoveToFirst())
{
importedContact.Name = cursor.GetString(cursor.GetColumnIndex(projection[1]));
importedContact.Phone = cursor.GetString(cursor.GetColumnIndex(projection[2]));
};
var id = cursor.GetString(cursor.GetColumnIndex(projection[0]));
var emailCursor = CrossCurrentActivity.Current.Activity.ContentResolver.Query(
ContactsContract.CommonDataKinds.Email.ContentUri,
null,
ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId + " = " + id, null, null);
if (emailCursor.MoveToFirst())
{
int colId = emailCursor.GetColumnIndex(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Data);
importedContact.Email = emailCursor.GetString(colId);
}
emailCursor.Close();
return importedContact;
}
catch
{
return null;
}
}
解决方案
实际问题是由于我调用选择器的方式 - 我错误地将意图类型设置为特定于电话数据:
public static void OpenContactPicker(Action<ImportedContact> callback)
{
_callback = callback;
Intent intent = new Intent(Intent.ActionPick);
intent.SetType(ContactsContract.CommonDataKinds.Phone.ContentType);
CurrentActivity.StartActivityForResult(intent, RequestCodes.ContactPicker);
}
这仅返回电话信息,不包括电子邮件、网站等。我将其更改为:
public static void OpenContactPicker(Action<ImportedContact> callback)
{
_callback = callback;
Intent intent = new Intent(Intent.ActionPick, ContactsContract.Contacts.ContentUri);
CurrentActivity.StartActivityForResult(intent, RequestCodes.ContactPicker);
}
这将根据需要返回所有联系信息。
推荐阅读
- apache-flex - 如何导入 flex iframe 组件?
- php - Ninja Forms:在 PDF 提交中显示复选框列表和文件上传值
- javascript - 如何将活动类添加到 ReactJS 中的单击项目
- sql-server - 如何使用 SSIS 加载隐藏的特殊字符
- google-slides-api - 如何获得 Google Slides 表格行的实际高度?
- docker - 更新 docker 服务时出错
- android - 如何在 Retrofit for Android 中外部化基本 URL
- javascript - 为什么我的 mat-error 只有在我单击按钮两次时才会显示?
- javascript - 用户输入时如何添加千位分隔符?
- karate - 空手道:有没有办法将函数应用于示例:变量?