Obtener contactos de un grupo especificado en android

Estoy tratando de obtener contactos de un grupo específico de id.i'm conocidos son capaces de obtener el grupo de identificación y los nombres de contacto en ese grupo. Pero no puedo obtener números de contacto.tried algunas soluciones de búsqueda de google, pero cada vez Estoy consiguiendo el número de teléfono iguales que identificación del grupo, si consulta el grupo para los números de teléfono y los nombres del contacto usando Phone.number, Phone.DISPLAY_NAME.if uso debajo del método que estoy consiguiendo error por favor me ayuda a figurar hacia fuera cuál es incorrecto en mi código.

Código:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.group_contacts); addGroups = (Button) findViewById(R.id.selectGroup); groupAdapter = new SimpleCursorAdapter(getApplicationContext(), android.R.layout.select_dialog_singlechoice, GroupCursor(), new String[] { ContactsContract.Groups.TITLE }, new int[] { android.R.id.text1 }); setListAdapter(groupAdapter); getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); addGroups.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(myGroups.this, Main.class); Bundle carry = new Bundle(); carry.putStringArrayList("numbers", cNumbers); carry.putStringArrayList("name", cNames); intent.putExtras(carry); setResult(RESULT_OK, intent); finish(); } }); } private Cursor GroupCursor() { String[] projection = { ContactsContract.Groups.TITLE, ContactsContract.Groups._ID }; Cursor gCursor = getContentResolver().query( ContactsContract.Groups.CONTENT_URI, projection, null, null, ContactsContract.Groups.TITLE); // int idcolumn = gCursor.getColumnIndex(ContactsContract.Groups._ID); // String id = gCursor.getString(idcolumn); // Log.d(E, "group id : " + id ); return gCursor; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Log.d(E, "id : " + id); String groupId = Long.toString(id); String[] cProjection = { Phone.NUMBER, Phone.DISPLAY_NAME ,Contacts.DISPLAY_NAME, Contacts._ID}; Cursor groupCursor = getContentResolver().query(Data.CONTENT_URI, cProjection, CommonDataKinds.GroupMembership.GROUP_ROW_ID + "= ?", new String[]{groupId}, null); if (groupCursor != null) { groupCursor.moveToFirst(); do { int nameCoumnIndex = groupCursor .getColumnIndex(Phone.DISPLAY_NAME); String name = groupCursor.getString(nameCoumnIndex); String cId = groupCursor.getString(groupCursor.getColumnIndex(Contacts._ID)); Cursor numberCursor = getContentResolver().query(Phone.CONTENT_URI, new String[]{Phone.NUMBER}, Phone._ID +"="+cId, null, null); numberCursor.moveToFirst(); int numberColumnIndex = numberCursor .getColumnIndex(Phone.NUMBER); Log.d(E, "numberindex : " + numberColumnIndex); String number = numberCursor.getString(numberColumnIndex); cNumbers.add(number); Log.d(E, "contact " + name + ":" + number); cNames.add(name); } while (groupCursor.moveToNext()); } } } 

Iniciar sesión :

  09-04 17:59:24.943: D/dalvikvm(18084): GC_EXTERNAL_ALLOC freed 23K, 48% free 2844K/5379K, external 1032K/1039K, paused 24ms 09-04 17:59:26.054: D/(18084): id : 14 09-04 17:59:26.074: D/(18084): numberindex : 0 09-04 17:59:26.074: D/AndroidRuntime(18084): Shutting down VM 09-04 17:59:26.074: W/dalvikvm(18084): threadid=1: thread exiting with uncaught exception (group=0x40015568) 09-04 17:59:26.084: E/AndroidRuntime(18084): FATAL EXCEPTION: main 09-04 17:59:26.084: E/AndroidRuntime(18084): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.database.CursorWrapper.getString(CursorWrapper.java:135) 09-04 17:59:26.084: E/AndroidRuntime(18084): at hm.swarna.groupsms.myGroups.onListItemClick(myGroups.java:117) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.app.ListActivity$2.onItemClick(ListActivity.java:319) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.widget.ListView.performItemClick(ListView.java:3535) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1827) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.os.Handler.handleCallback(Handler.java:587) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.os.Handler.dispatchMessage(Handler.java:92) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.os.Looper.loop(Looper.java:130) 09-04 17:59:26.084: E/AndroidRuntime(18084): at android.app.ActivityThread.main(ActivityThread.java:3703) 09-04 17:59:26.084: E/AndroidRuntime(18084): at java.lang.reflect.Method.invokeNative(Native Method) 09-04 17:59:26.084: E/AndroidRuntime(18084): at java.lang.reflect.Method.invoke(Method.java:507) 09-04 17:59:26.084: E/AndroidRuntime(18084): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 09-04 17:59:26.084: E/AndroidRuntime(18084): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 09-04 17:59:26.084: E/AndroidRuntime(18084): at dalvik.system.NativeStart.main(Native Method) 09-04 17:59:27.556: I/Process(18084): Sending signal. PID: 18084 SIG: 9 

Intente utilizar el siguiente código en su método onListItemClick:

 long groupId = id; String[] cProjection = { Contacts.DISPLAY_NAME, GroupMembership.CONTACT_ID }; Cursor groupCursor = getContentResolver().query( Data.CONTENT_URI, cProjection, CommonDataKinds.GroupMembership.GROUP_ROW_ID + "= ?" + " AND " + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'", new String[] { String.valueOf(groupId) }, null); if (groupCursor != null && groupCursor.moveToFirst()) { do { int nameCoumnIndex = groupCursor.getColumnIndex(Phone.DISPLAY_NAME); String name = groupCursor.getString(nameCoumnIndex); long contactId = groupCursor.getLong(groupCursor.getColumnIndex(GroupMembership.CONTACT_ID)); Cursor numberCursor = getContentResolver().query(Phone.CONTENT_URI, new String[] { Phone.NUMBER }, Phone.CONTACT_ID + "=" + contactId, null, null); if (numberCursor.moveToFirst()) { int numberColumnIndex = numberCursor.getColumnIndex(Phone.NUMBER); do { String phoneNumber = numberCursor.getString(numberColumnIndex); Log.d("your tag", "contact " + name + ":" + phoneNumber); } while (numberCursor.moveToNext()); numberCursor.close(); } } while (groupCursor.moveToNext()); groupCursor.close(); } 

Debe especificar el tipo de mimet al consultar los contactos, que pertenecen al grupo especificado. Y debido a que un solo contacto puede tener varios números de teléfono, es posible que tenga que consultar a todos ellos.

EDIT: Para obtener todos los grupos con al menos un contacto con número de teléfono, puede utilizar la siguiente consulta:

 ContentResolver cr = getContentResolver(); Uri groupsUri = ContactsContract.Groups.CONTENT_SUMMARY_URI; String where = "((" + ContactsContract.Groups.GROUP_VISIBLE + " = 1) AND (" + ContactsContract.Groups.SUMMARY_WITH_PHONES + "!= 0))"; Cursor cursor = cr.query(groupsUri, null, where, null, null); 

En cuanto a obtener contactos con el número de teléfono de un grupo especificado – No sé solución simple.

Aquí está la respuesta a lo que usted está pidiendo. Obtener todos los números de teléfono del grupo específico #name. Este spagetti sin duda puede ser más corto, si se utiliza algún tiempo en él, para optimizar un poco.

 public ArrayList<String> getAllNumbersFromGroupId(String navn) { String selection = ContactsContract.Groups.DELETED + "=? and " + ContactsContract.Groups.GROUP_VISIBLE + "=?"; String[] selectionArgs = { "0", "1" }; Cursor cursor = context.getContentResolver().query(ContactsContract.Groups.CONTENT_URI, null, selection, selectionArgs, null); cursor.moveToFirst(); int len = cursor.getCount(); ArrayList<String> numbers = new ArrayList<String>(); for (int i = 0; i < len; i++) { String title = cursor.getString(cursor.getColumnIndex(ContactsContract.Groups.TITLE)); String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Groups._ID)); if (title.equals(navn)) { String[] cProjection = { Contacts.DISPLAY_NAME, GroupMembership.CONTACT_ID }; Cursor groupCursor = context.getContentResolver().query( Data.CONTENT_URI, cProjection, CommonDataKinds.GroupMembership.GROUP_ROW_ID + "= ?" + " AND " + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'", new String[] { String.valueOf(id) }, null); if (groupCursor != null && groupCursor.moveToFirst()) { do { int nameCoumnIndex = groupCursor.getColumnIndex(Phone.DISPLAY_NAME); String name = groupCursor.getString(nameCoumnIndex); long contactId = groupCursor.getLong(groupCursor.getColumnIndex(GroupMembership.CONTACT_ID)); Cursor numberCursor = context.getContentResolver().query(Phone.CONTENT_URI, new String[] { Phone.NUMBER }, Phone.CONTACT_ID + "=" + contactId, null, null); if (numberCursor.moveToFirst()) { int numberColumnIndex = numberCursor.getColumnIndex(Phone.NUMBER); do { String phoneNumber = numberCursor.getString(numberColumnIndex); numbers.add(phoneNumber); } while (numberCursor.moveToNext()); numberCursor.close(); } } while (groupCursor.moveToNext()); groupCursor.close(); } break; } cursor.moveToNext(); } cursor.close(); return numbers; } 

mi solución

 public static HashMap<String, String> getContactsForGroup(String groupID, Activity activity){ Cursor dataCursor = activity.getContentResolver().query( ContactsContract.Data.CONTENT_URI, new String[]{ // PROJECTION ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME, // contact name ContactsContract.Data.DATA1 // group }, ContactsContract.Data.MIMETYPE + " = ? " + "AND " + // SELECTION ContactsContract.Data.DATA1 + " = ? ", // set groupID new String[]{ // SELECTION_ARGS ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE, groupID }, null); dataCursor.moveToFirst(); HashMap<String, String> map = new HashMap<>(); while (dataCursor.moveToNext()) // { String s0 = dataCursor.getString(0); //contact_id String s1 = dataCursor.getString(1); //contact_name String s2 = dataCursor.getString(2); //group_id Log.d("tag", "contact_id: " + s0 + " contact: " + s1 + " groupID: "+ s2); map.put(s0, s1); } return map; } 
  • No se puede insertar los contactos de android mediante programación en el dispositivo de Android
  • Agregar nuevo contacto mediante la intención con varios números de teléfono
  • ListView de los contactos
  • Selecciona el contacto directamente desde el selector de contactos
  • Cómo agregar tono de llamada a los contactos de la aplicación nativa mediante programación en android
  • Android, cómo obtener fotos de contacto de Facebook / Twitter / etc
  • Android SDK: código fuente de Contact ContentProvider
  • Obtener contactos actualizados en Android para sincronización de contactos
  • ¿Cuál es la forma correcta de poner una fecha de nacimiento en datos de contacto?
  • Obtenga información de contacto específica de la URI devuelta por Intent.ACTION_PICK
  • Aplicación de fuerza cerrada en la tecla Atrás presionada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.