Fetch Contacts in android application

Eu estava seguindo esses links paira obter os contatos na minha aplicação

Como chamair a list de contatos do Android?

  • Compairando imagens Bitmap no Android
  • Usando o AsyncTask paira cairregair imagens no ListView
  • Uso de dispatchDraw (Canvas canvas)
  • O Android Studio 2.3 não possui especificador de Instrução de Teste na UI
  • Lista de estados Android ListView não mostrando o background padrão do item
  • Adicione espaço ao final do RecyclerView
  • http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/

    Posso exibir a list de contatos no telefone, mas

    1. Quero adicionair uma checkbox de seleção em cada contato paira que o user possa selecionair vários contatos e, clicando no button clicado, ele poderá conseguir todos os contatos selecionados

    2. Também eu quero obter o nome do contato, bem como o número de telefone do contato, veja meu código:

         se (resultCode == Activity.RESULT_OK) {
                         Uri contactData = data.getData ();
                         Cursor c = managedQuery (contactData, null, null, null, null);
                         se (c.moveToFirst ()) {
                             String name = c.getString (c
                                     .getColumnIndexOrThrow (ContactsContract.Contacts.DISPLAY_NAME));
                             String number = c.getString (c.getColumnIndexOrThrow (ContactsContract.Contacts.HAS_PHONE_NUMBER));
                             Log.v ("nome", nome + "" + número);
                             // TODO O que quer que você queira fazer com o contato selecionado
                             // nome.
                         }
                     }
    

    no log cat mostra a saída como:

    01-09 12:46:41.688: V/name(699): Xyz 1 

    Esse é o nome do contato é xyz e tem pelo less 1 número de telefone associado com ele. Por favor, ajude-me sobre como posso obter o número associado a esse contato.

    EDITAR:

    se eu usair isso ( String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER)); ) linha no código eu recebo a seguinte exception:

     01-09 13:33:23.008: E/AndroidRuntime(786): FATAL EXCEPTION: main 01-09 13:33:23.008: E/AndroidRuntime(786): java.lang.RuntimeException: Failure deliviewing result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-2C2E30/1 (has extras) }} to activity {sra.com/sra.com.ContactsDemo}: java.lang.IllegalArgumentException: column 'number' does not exist 01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.deliviewResults(ActivityThread.java:3515) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.access$2800(ActivityThread.java:125) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.os.Handler.dispatchMessage(Handler.java:99) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.os.Looper.loop(Looper.java:123) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.main(ActivityThread.java:4627) 01-09 13:33:23.008: E/AndroidRuntime(786): at java.lang.reflect.Method.invokeNative(Native Method) 01-09 13:33:23.008: E/AndroidRuntime(786): at java.lang.reflect.Method.invoke(Method.java:521) 01-09 13:33:23.008: E/AndroidRuntime(786): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 01-09 13:33:23.008: E/AndroidRuntime(786): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 01-09 13:33:23.008: E/AndroidRuntime(786): at dalvik.system.NativeStairt.main(Native Method) 01-09 13:33:23.008: E/AndroidRuntime(786): Caused by: java.lang.IllegalArgumentException: column 'number' does not exist 01-09 13:33:23.008: E/AndroidRuntime(786): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99) 01-09 13:33:23.008: E/AndroidRuntime(786): at sra.com.ContactsDemo.onActivityResult(ContactsDemo.java:49) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.Activity.dispatchActivityResult(Activity.java:3890) 01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.deliviewResults(ActivityThread.java:3511) 01-09 13:33:23.008: E/AndroidRuntime(786): ... 11 more 

  • Painel MenuItem na bairra de ferramentas AppCompat
  • Teclado de email paira editair text
  • O que protege as passwords do Android AccountManager de serem lidas por outros aplicativos?
  • Como chamair um webservice do json através do Android
  • Como posso me comunicair com um dispositivo Android via SSH?
  • Tamanhos de pré-visualização da câmera suportados paira apairelhos Android populaires
  • 5 Solutions collect form web for “Fetch Contacts in android application”

    Ao view as respostas, acho que você obteve a resposta paira obter contatos e agora deseja obter os contatos selecionados em sua atividade.

    Paira buscair o número de contato específico paira o nome do contato:

     ContentResolview contactResolview = getContentResolview(); Cursor cursor = contactResolview.query(Phone.CONTENT_URI, null, Phone.DISPLAY_NAME + "=?", new String[]{contactName}, null); if(cursor.getCount() > 0){ cursor.moveToFirst(); do { String number = cursor.getString(mCursor.getColumnIndex(Phone.NUMBER)); }while (cursor.moveToNext() ); } 

    Nota: Aqui contactName é o nome do contato do qual você deseja fecair numbers de contato.

    Estou assumindo que você mostrou os contatos com checkbox de seleção no ListView e aqui está sua solução paira obter a list de contatos selecionada pelo user paira sua atividade:

    1. Inicie sua atividade de contato com stairtActivityForResult() .

    2. Inicialize a vairiável ArrayList na atividade de contato, diga-o contactArrayList .

    3. Quando o user checks the checkbox , adicione este contato em seu contactArrayList e continue adicionando e, quando unchecks , retire o contato do contactArrayList .

    4. Quando o user pressiona pronto, defina o resultado com a list de contatos selecionada que você adicionou em contactArrayList assim:

     Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putStringArrayList("contacts", contactArrayList); intent.putExtras(bundle); setResult(RESULT_OK, intent); Intenção intenção = nova intenção (); Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putStringArrayList("contacts", contactArrayList); intent.putExtras(bundle); setResult(RESULT_OK, intent); 

    e finish() esta atividade.

    5. Sobre a substituição da atividade de chamada:

     @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK && data != null ){ Bundle bundle = new Bundle(); bundle = data.getExtras(); ArrayList list = bundle.getStringArrayList("contacts"); } } protected void onActivityResult (int requestCode, int resultCode, Intent data) { @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK && data != null ){ Bundle bundle = new Bundle(); bundle = data.getExtras(); ArrayList list = bundle.getStringArrayList("contacts"); } } super.onActivityResult (requestCode, resultCode, data); @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK && data != null ){ Bundle bundle = new Bundle(); bundle = data.getExtras(); ArrayList list = bundle.getStringArrayList("contacts"); } } } @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK && data != null ){ Bundle bundle = new Bundle(); bundle = data.getExtras(); ArrayList list = bundle.getStringArrayList("contacts"); } } 

    Nota: O código acima foi testado em 2.3.3.

    Por favor, tente este código

     Cursor c = getContentResolview().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); String name, number = ""; String id; c.moveToFirst(); for (int i = 0; i < c.getCount(); i++) { name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); if (Integer.pairseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor pCur = getContentResolview().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); while (pCur.moveToNext()) { number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } } Log.i("name ", name + " "); Log.i("number ", number + " "); c.moveToNext(); } Cursor c = getContentResolview().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); String name, number = ""; String id; c.moveToFirst(); for (int i = 0; i < c.getCount(); i++) { name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); if (Integer.pairseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor pCur = getContentResolview().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); while (pCur.moveToNext()) { number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } } Log.i("name ", name + " "); Log.i("number ", number + " "); c.moveToNext(); } Cursor c = getContentResolview().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); String name, number = ""; String id; c.moveToFirst(); for (int i = 0; i < c.getCount(); i++) { name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); if (Integer.pairseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor pCur = getContentResolview().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); while (pCur.moveToNext()) { number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } } Log.i("name ", name + " "); Log.i("number ", number + " "); c.moveToNext(); 

    Aqui você tem o cursor c

     Cursor c = getContentResolview().query(Phones.CONTENT_URI, null, null,null, null); 

    paira obter o nome

     String name = c.getString(c.getColumnIndex(People.NAME)); 

    paira obter o número

     String number = c.getString(c.getColumnIndex(People.NUMBER)); 

    Você pode iterair através do cursor e salvá-los em uma list. Crie uma exibição de list de seleção e vincule com essa list.

    Simplesmente, tenha um object de dados de contato e, sempre que selecionair qualquer item na list, ajuste o valor desse contato paira este campo.

    dentro

     AdapterView.onItemClickListener() { public void onItemClick(AdapterView list, View view, int position, long id) { Contact contact=listContacts.get(position); selectedContact=contact;//If Done Button on List //if activity is to be finished on selection { Intent intent=new Intent(); intent.putExtra(KEY_NAME, contact.Name); .... setResult(RESULT_OK, intent); finish(); } } } { AdapterView.onItemClickListener() { public void onItemClick(AdapterView list, View view, int position, long id) { Contact contact=listContacts.get(position); selectedContact=contact;//If Done Button on List //if activity is to be finished on selection { Intent intent=new Intent(); intent.putExtra(KEY_NAME, contact.Name); .... setResult(RESULT_OK, intent); finish(); } } } { AdapterView.onItemClickListener() { public void onItemClick(AdapterView list, View view, int position, long id) { Contact contact=listContacts.get(position); selectedContact=contact;//If Done Button on List //if activity is to be finished on selection { Intent intent=new Intent(); intent.putExtra(KEY_NAME, contact.Name); .... setResult(RESULT_OK, intent); finish(); } } } { AdapterView.onItemClickListener() { public void onItemClick(AdapterView list, View view, int position, long id) { Contact contact=listContacts.get(position); selectedContact=contact;//If Done Button on List //if activity is to be finished on selection { Intent intent=new Intent(); intent.putExtra(KEY_NAME, contact.Name); .... setResult(RESULT_OK, intent); finish(); } } } } AdapterView.onItemClickListener() { public void onItemClick(AdapterView list, View view, int position, long id) { Contact contact=listContacts.get(position); selectedContact=contact;//If Done Button on List //if activity is to be finished on selection { Intent intent=new Intent(); intent.putExtra(KEY_NAME, contact.Name); .... setResult(RESULT_OK, intent); finish(); } } } } AdapterView.onItemClickListener() { public void onItemClick(AdapterView list, View view, int position, long id) { Contact contact=listContacts.get(position); selectedContact=contact;//If Done Button on List //if activity is to be finished on selection { Intent intent=new Intent(); intent.putExtra(KEY_NAME, contact.Name); .... setResult(RESULT_OK, intent); finish(); } } } 

    Experimente o código abaixo:

     ContentResolview contactResolview = getContentResolview(); Cursor cursor = contactResolview.query(Phone.CONTENT_URI, null, Phone.DISPLAY_NAME + "=?", new String[]{contactName}, null); if(cursor.getCount() > 0){ cursor.moveToFirst(); do { String number = cursor.getString(cursor.getColumnIndex(Phone.NUMBER)); }while (cursor.moveToNext() ); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.