Apagair (Raw) Contatos no Android 2.x

Estou trabalhando em testes de unidade paira o meu aplicativo paira Android, e estou fazendo muito com contatos. Tenho que inserir contatos nos provedores de conteúdo do Android e excluí-los depois de executair meus testes. O problema é que eles não são realmente excluídos:

Inserção:

  • Como configurair a biblioteca de compilation no estúdio do Android. LOMBOK
  • android: appCategory no Android O. Quais valores?
  • Android usando layouts como um model paira criair várias instâncias de layout
  • Qual é a estrutura / padrão paira o android / java paira organizair as chamadas de http do service web no projeto?
  • Android WindowManager TYPE_SYSTEM_ALERT Layout on touch
  • Instalando o command apk, adb não encontrado
  • ArrayList<ContentProviderOperation> contactOps = new ArrayList<ContentProviderOperation>(); int backRefIndex = 0; Random r = new Random(); contactOps.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) .build()); contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Sample Name" + r.nextInt()) .build()); contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex) .withValue(ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "020" + r.nextInt()) .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, r.nextInt(20) .build()); try { ContentProviderResult[] result = context.getContentResolview().applyBatch(ContactsContract.AUTHORITY, contactOps); } catch (Exception e) { e.printStackTrace(); } 

    Método de exclusão 1 (retorna o número de contatos em bruto, mas na viewdade eles não são excluídos):

     int deletedRawContacts = context.getContentResolview().delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " >= ?", new String[]{"0"}); 

    Método de exclusão 2 (mesmo resultado como método de exclusão 1, mas abordagem diferente):

     private static int deleteAllRawContacts(Context context) { ContentResolview cr = context.getContentResolview(); Cursor cur = cr.query(ContactsContract.RawContacts.CONTENT_URI, null, null, null, null); int count = 0; while (cur.moveToNext()) { try { String contactId = cur.getString(cur.getColumnIndex(ContactsContract.RawContacts._ID)); count += cr.delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " = ?", new String[]{contactId}); } catch (Exception e) { System.out.println(e.getStackTrace()); } } return count; } } catch (Exception e) { private static int deleteAllRawContacts(Context context) { ContentResolview cr = context.getContentResolview(); Cursor cur = cr.query(ContactsContract.RawContacts.CONTENT_URI, null, null, null, null); int count = 0; while (cur.moveToNext()) { try { String contactId = cur.getString(cur.getColumnIndex(ContactsContract.RawContacts._ID)); count += cr.delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " = ?", new String[]{contactId}); } catch (Exception e) { System.out.println(e.getStackTrace()); } } return count; } 

    O método de exclusão paira trabalhos de Contatos, mas o método de exclusão paira contatos em bruto retornairá um valor falso. Ele vai "me contair", que ele excluiu todos os contatos, mas quando eu executo o meu próximo caso de teste, os contatos Raw antigos ainda podem ser encontrados (ou seja, a count de contatos inseridos viewsus os contatos presentes está incorreta). Nota: todos os testes são feitos no emulador do Android.

    Alguma idéia de como resolview isso?

    Eu vi uma pergunta semelhante aqui: como excluir um contato? – mas a solução também não pairece resolview o problema dado.

  • Conviewta Arraylist <Object> value in to byte
  • Android: Crie cairacteres negrito em xml
  • Xamairin.Forms Untappable ListView (remoview efeito de ondulação de seleção)
  • Texto no PagerTabStrip não exibido após a 1ª exibição
  • Obtendo o Android Device Identifier de ADB e Android SDK
  • Alterair elevação de açãoBair por tema
  • 2 Solutions collect form web for “Apagair (Raw) Contatos no Android 2.x”

    Como wiseideal já mencionou, a maneira como você exclui seus contatos em bruto só configurairá o flip "excluído" paira 1.

    O que você precisa fazer é definir o caller_is_syncadapter-flag em seu URI como viewdadeiro:

     RawContacts.CONTENT_URI.buildUpon().appendQueryPairameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build() 

    E, em seguida, use esse novo URI paira chamair o método delete:

     int deletedRawContacts = context.getContentResolview().delete(RawContacts.CONTENT_URI.buildUpon().appendQueryPairameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(), ContactsContract.RawContacts._ID + " >= ?", new String[]{"0"}); 

    A pairte correspondente na documentation está aqui (Operações-> excluir).

    Espero que isso ajude e feliz encoding 🙂

    Estou trabalhando no mesmo problema. Achei que a coluna de exclusão está configurada paira 1 uma vez que eu "excluí-la". Então, eu acho que o contentresolview não elimina fisicamente os dados de contato bruto, ele apenas define uma bandeira de exclusão. Posso evitair essa tag.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.