Context.ContentResolver.Delete returns 0 个联系人
Context.ContentResolver.Delete returns 0 for some contact
我有一个奇怪的问题。我正在尝试根据设备中给定的 phone and/or 电子邮件地址删除联系人。我的设备中有 150 个联系人,所以它删除了大约 100 个联系人,但其余 50 个没有删除。
我使用以下代码删除联系人(此方法是从循环中调用的)。
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;
}
我在设备 "Notification bar" 中看到一个错误:"Too many contact deletions"
所以不确定这里出了什么问题。对此有什么想法吗?
I am trying to delete all contacts from device
您的代码不会删除设备中的所有联系人,它基于 phone 号码查询,因此不会删除所有没有 phone 号码的联系人。
此外,还有一种更简单的方法可以从设备中删除所有联系人,无需 运行 查询并删除每个联系人的通话,只需一个,这未经过测试,但应该可以作为选择将匹配设备上的所有联系人。
ContentResolver cr = getContentResolver();
cr.delete(ContactsContract.Contacts.CONTENT_URI, null, null);
(在 Android Java API 中,您需要转换为 Xamarin APIs,因为我对它们不太熟悉)
I see an error in "Notification bar" of device: "Too many contact
deletions"
一个SyncProvider
负责同步服务器变更到云端,云端变更到设备。当 SyncProvider 遇到大量客户端删除时,它会引发一个标志,并且在将这些删除同步到云之前,它会通过通知通知用户,单击通知应该询问用户是否是故意的,以及 he/she现在想做:同步删除到云端,撤消所有删除,什么都不做(将删除保存在本地,但不要同步到云端)。
我有一个奇怪的问题。我正在尝试根据设备中给定的 phone and/or 电子邮件地址删除联系人。我的设备中有 150 个联系人,所以它删除了大约 100 个联系人,但其余 50 个没有删除。
我使用以下代码删除联系人(此方法是从循环中调用的)。
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;
}
我在设备 "Notification bar" 中看到一个错误:"Too many contact deletions"
所以不确定这里出了什么问题。对此有什么想法吗?
I am trying to delete all contacts from device
您的代码不会删除设备中的所有联系人,它基于 phone 号码查询,因此不会删除所有没有 phone 号码的联系人。
此外,还有一种更简单的方法可以从设备中删除所有联系人,无需 运行 查询并删除每个联系人的通话,只需一个,这未经过测试,但应该可以作为选择将匹配设备上的所有联系人。
ContentResolver cr = getContentResolver();
cr.delete(ContactsContract.Contacts.CONTENT_URI, null, null);
(在 Android Java API 中,您需要转换为 Xamarin APIs,因为我对它们不太熟悉)
I see an error in "Notification bar" of device: "Too many contact deletions"
一个SyncProvider
负责同步服务器变更到云端,云端变更到设备。当 SyncProvider 遇到大量客户端删除时,它会引发一个标志,并且在将这些删除同步到云之前,它会通过通知通知用户,单击通知应该询问用户是否是故意的,以及 he/she现在想做:同步删除到云端,撤消所有删除,什么都不做(将删除保存在本地,但不要同步到云端)。