0

J'ai un problème étrange. J'essaye de supprimer des contacts basés sur le téléphone donné et/ou l'adresse électronique de l'appareil. J'avais 150 contacts dans l'appareil, donc il a supprimé environ 100 contacts mais reste 50 ne supprime pas.Context.ContentResolver.Delete renvoie 0 pour un contact

J'utilise le code suivant pour supprimer le contact (cette méthode appelle à partir d'une boucle).

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; 
} 

Je vois une erreur dans « Barre de notification » de l'appareil: « Trop de suppressions de contact »

donc pas sûr de ce qui ne va pas ici. Des pensées à ce sujet?

+1

Désactiver la synchronisation des contacts sur les comptes de votre appareil – SushiHangover

Répondre

1

Je suis en train de supprimer tous les contacts de dispositif

votre code ne supprime pas tous les contacts de l'appareil, il est basé sur l'interrogation par numéro de téléphone, de sorte que tous les contacts qui ne disposent pas d'un téléphone le nombre ne sera pas supprimé.

En outre, il existe un moyen beaucoup plus facile de supprimer tous les contacts de l'appareil, pas besoin d'exécuter une requête et supprimer les appels par contacts, un seul, cela ne fonctionne pas, car la sélection correspondra à tous les contacts le dispositif.

ContentResolver cr = getContentResolver(); 
cr.delete(ContactsContract.Contacts.CONTENT_URI, null, null); 

(Il est dans l'API Android Java, vous devrez convertir aux API Xamarin, comme je suis moins familier avec eux)

Je vois une erreur dans « Barre de notification » du dispositif : « Trop de contacts suppressions »

A SyncProvider est en charge de la synchronisation des changements de serveur vers le cloud, et les changements de nuages ​​au dispositif. Quand un SyncProvider rencontre beaucoup de suppressions côté client, il soulève un drapeau, et avant qu'il ne synchronise ces suppressions vers le nuage, il informe l'utilisateur via une notification, en cliquant sur la notification devrait demander à l'utilisateur si cela était intentionnel, et ce qu'il/elle veut faire maintenant: synchroniser les suppressions sur le nuage, annuler toute suppression, ne rien faire (garder les suppressions locales, mais ne pas les synchroniser avec le nuage).

+0

Merci @marmor - J'ai mis à jour ma question. J'essaye de supprimer des contacts basés sur l'adresse de téléphone/email donnée. Cependant, j'ai trouvé que je devrais prendre une action (par exemple, supprimer définitivement sur "Trop de suppression") et puis il peut supprimer ces contacts. – SoftSan