Android Context.ContentResolver.Delete为某些联系人返回0
我有一个奇怪的问题。我正在尝试从设备中删除基于给定电话和/或电子邮件地址的联系人。我在设备中有150个联系人,所以它删除了大约100个联系人,但其余50个并没有删除 我使用以下代码删除此方法从循环中调用的联系人Android Context.ContentResolver.Delete为某些联系人返回0,android,xamarin,xamarin.android,android-contacts,android-contentresolver,Android,Xamarin,Xamarin.android,Android Contacts,Android Contentresolver,我有一个奇怪的问题。我正在尝试从设备中删除基于给定电话和/或电子邮件地址的联系人。我在设备中有150个联系人,所以它删除了大约100个联系人,但其余50个并没有删除 我使用以下代码删除此方法从循环中调用的联系人 public bool DeleteRecord(string phoneNumber, string email) { var Id = "0"; var isDeleted = false; string lookupKey = string.Empty;
public bool DeleteRecord(string phoneNumber, string email)
{
var Id = "0";
var isDeleted = false;
string lookupKey = string.Empty;
try
{
var uri = ContactsContract.Contacts.ContentUri;
string[] projection = {
InterfaceConsts.Id,
InterfaceConsts.DisplayName,
ContactsContract.Contacts.InterfaceConsts.LookupKey
};
var uri1 = Android.Net.Uri.WithAppendedPath(ContactsContract.PhoneLookup.ContentFilterUri, Android.Net.Uri.Encode(phoneNumber));
var cursor = appContext.ContentResolver.Query(uri1, projection, null, null, null);
if (cursor.MoveToFirst())
{
do
{
Id = cursor.GetString(cursor.GetColumnIndex(projection[0]));
if (Id != "0")
{
int idx = cursor.GetColumnIndex(ContactsContract.ContactsColumns.LookupKey);
lookupKey = cursor.GetString(idx);
}
break;
} while (cursor.MoveToNext());
cursor.Close();
}
isDeleted = Id != "0";
if (isDeleted)
{
var u = Android.Net.Uri.WithAppendedPath(ContactsContract.Contacts.ContentLookupUri, lookupKey);
var res = appContext.ContentResolver.Delete(u, "contact_id=" + Id, null);
return true;
}
}
catch (Exception ex)
{
Android.Util.Log.Error("Error:", ex.Message + " " + ex.StackTrace);
}
return false;
}
我在设备的通知栏中看到一个错误:删除的联系人太多
所以我不确定这里出了什么问题。有什么想法吗
我正在尝试从设备中删除所有联系人
您的代码不会从设备中删除所有联系人,它基于按电话号码查询,因此不会删除所有没有电话号码的联系人
此外,还有一种更简单的方法可以从设备中删除所有联系人,无需对每个联系人运行查询和删除呼叫,只需一个,这没有经过测试,但应该可以工作,因为选择将匹配设备上的所有联系人
ContentResolver cr = getContentResolver();
cr.delete(ContactsContract.Contacts.CONTENT_URI, null, null);
在Android Java API中,您需要转换为Xamarin API,因为我对它们不太熟悉
我在设备的通知栏中看到一个错误:联系人太多
删除
SyncProvider负责将服务器更改同步到云,并将云更改同步到设备。当SyncProvider遇到大量客户端删除时,它会发出一个标志,在将这些删除同步到云之前,它会通过通知通知用户,单击通知应询问用户这是否是有意的,以及他/她现在想做什么:将删除同步到云,撤消所有删除,不要将删除内容保留在本地,但不要将其同步到云端。禁用设备上任何帐户的联系人同步Hanks@marmor-我已更新了我的问题。我正在尝试根据给定的电话/电子邮件地址删除联系人。然而,我发现我应该采取一些行动。删除太多联系人时永久删除,然后可以删除这些联系人。