我正在创建一个应该列出联系人和联系人电话的应用程序。我可以做的联系人列表,但我无法列出与特定联系人关联的电话号码。 我一直在网络上寻找可行的解决方案来解决我的问题,但我无法找到解决方案。
这是读取和列出联系人的代码。
public List<Contato> ListaContato()
{
var uri = ContactsContract.Contacts.ContentUri;
string[] projection = { ContactsContract.Contacts.InterfaceConsts.Id, ContactsContract.Contacts.InterfaceConsts.DisplayName, ContactsContract.Contacts.InterfaceConsts.PhotoId };
var cursor = Context.ContentResolver.Query(uri, projection, null, null, null);
var contactList = new List<Contato>();
if (cursor.MoveToFirst())
{
do
{
Contato contato = new Contato();
Telefone telefone = new Telefone();
contato.Id = cursor.GetInt(cursor.GetColumnIndex(projection[0]));
contato.NomeContato = cursor.GetString(cursor.GetColumnIndex(projection[1]));
contato.FotoContato = cursor.GetString(cursor.GetColumnIndex(projection[2]));
contato.Telefone = CarregarTelefone(contato.Id.ToString());
contactList.Add(contato);
}
while (cursor.MoveToNext());
}
return contactList;
}
另一种方法是列出与联系人关联的电话号码。
public List<Telefone> CarregarTelefone(string contactId)
{
//ContactsContract.CommonDataKinds.Phone.SearchDisplayNameKey
var cursor = Context.ContentResolver.Query(Phone.ContentUri, new String[] { Phone.Number }, ContactsContract.CommonDataKinds.Identity.IdentityColumnId + "=" + contactId, null, null);
//var c = Context.ContentResolver.Query(Phone.ContentUri, new String[] { Phone.Number }, Phone.ContentItemType + "=" + Phone.TYPE_MOBILE + " and " + Phone.CONTACT_ID + "=" + contactId, null, null);
List<Telefone> litel = new List<Telefone>();
//if (cursor.MoveToNext())
//{
// Telefone tele = new Telefone();
// tele.NumeroTelefone = cursor.GetString(0);
// litel.Add(tele);
//}
while (cursor.MoveToNext())
{
Telefone tele = new Telefone();
tele.NumeroTelefone = cursor.GetString(0);
litel.Add(tele);
}
return litel;
}
我已将此代码用作参考,但它并不能完全为我服务。
cursor = contentResolver.query(Phone.CONTENT_URI, new String [] {Phone.NUMBER}, Phone.TYPE +“=”+ Phone.TYPE_MOBILE +“and”+ Phone.CONTACT_ID +“=”+ contactId,null,null);
代码包含在以下链接中:ContentResolver.Query()
那么,我如何能够在我的xamarin应用程序中列出联系人的所有电话号码?
晚安人! 关于发现手机标签(手机,家庭,工作等)的问题,我想说我已经找到了解决方案,我在这里与你分享。
public List<Telefone> CarregarTelefone(string contactId)
{
var uri = ContactsContract.Contacts.ContentUri;
string[] projection = { Phone.Number, CommonColumns.Type };
var cursor = Context.ContentResolver.Query(Phone.ContentUri, projection, ContactsContract.RawContactsColumns.ContactId + "=" + contactId, null, null);
List<Telefone> litel = new List<Telefone>();
if (cursor != null)
{
while (cursor.MoveToNext())
{
Telefone tele = new Telefone();
tele.NumeroTelefone = cursor.GetString(0);
tele.Etiqueta = CarregarEtiqueta(int.Parse(cursor.GetString(1)));
litel.Add(tele);
}
}
cursor.Close();
return litel;
}
现在我仍然需要帮助解决列出联系人群组(家庭,工作,同学,教师等)的问题。我在网上看了一些东西,但我还没有成功。任何提示都非常受欢迎。
答案 0 :(得分:0)
我正在创建一个应该列出联系人和联系人电话的应用程序。我可以做的联系人列表,但我无法列出与特定联系人关联的电话号码。我一直在网络上寻找可行的解决方案来解决我的问题,但我无法找到解决方案。
您无法根据contactId
检索电话号码,因为您使用了错误的过滤字符串:
ContactsContract.CommonDataKinds.Identity.IdentityColumnId + "=" + contactId
正确的过滤器如下所示:
ContactsContract.CommonDataKinds.Phone.InterfaceConsts.ContactId + "=" + contactId
所以CarregarTelefone
应如下所示:
public List<Telefone> CarregarTelefone(string contactId)
{
var cursor = this.ContentResolver.Query(ContactsContract.CommonDataKinds.Phone.ContentUri, new string[] { Phone.Number }, ContactsContract.CommonDataKinds.Phone.InterfaceConsts.ContactId + "=" + contactId, null, null);
List<Telefone> litel = new List<Telefone>();
while (cursor.MoveToNext())
{
Telefone tele = new Telefone();
tele.NumeroTelefone = cursor.GetString(0);
litel.Add(tele);
}
return litel;
}
<强>更新强>
要搜索礼节,您可以在搜索栏中添加ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type
列:
var cursor = this.ContentResolver.Query(ContactsContract.CommonDataKinds.Phone.ContentUri, new string[] { Phone.Number, Phone.InterfaceConsts.Type }, ContactsContract.CommonDataKinds.Phone.InterfaceConsts.ContactId + "=" + contactId, null, null);
它将为您提供一个int值。您可以将int与type table进行比较,以获取当前类型的手机。