ver samsung para masivos grupo enviar electronico cómo crear crea correos correo corporativo contactos configurar como celular antiguos android performance android-contentprovider android-contacts android-contentresolver

samsung - configurar correo corporativo outlook en android



El proveedor de contactos de Android solo recibe contactos telefónicos con todos los correos electrónicos (1)

Debería poder obtener toda la información necesaria en una consulta en Data.CONTENT_URI, consulte la tabla "android.provider.ContactsContract.Data" y los ejemplos sobre cómo consultar diferentes tipos de datos de correo electrónico, teléfono, foto, etc. http://developer.android.com/reference/android/provider/ContactsContract.Data.html

Por ejemplo:

Cursor data = cntx.getContentResolver().query(Data.CONTENT_URI, new String[] {Data._ID,Data.MIMETYPE,Email.ADDRESS,Photo.PHOTO},Data.CONTACT_ID + "=?" + " AND " + "(" + Data.MIMETYPE + "=''" + Photo.CONTENT_ITEM_TYPE + "'' OR " + Data.MIMETYPE + "=''" + Email.CONTENT_ITEM_TYPE +"'')", new String[] {String.valueOf(contactId)}, null);

En caso de que le proporcione toda la información que necesita con respecto a un ID de contacto específico, en teoría podría solicitar todos los contactos y ordenar la información usted mismo.

En cuanto al filtrado de contactos de gmail, este es un problema más complejo, eche un vistazo al parámetro ACCOUNT_NAME / TYPE http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html y una discusión sobre este problema aquí: ¿Qué? ¿Es el tipo / nombre de cuenta predeterminado para contactos en la aplicación de contacto de Android?

Necesito obtener todos los contactos del teléfono y su dirección de correo electrónico y foto uri:

Esto es lo que estoy haciendo:

private void getContacts() { ContentResolver cr = getContentResolver(); Cursor cur = cr.query(Contacts.CONTENT_URI, null, null, null, Contacts.DISPLAY_NAME); if (cur.getCount() > 0) { while (cur.moveToNext()) { // if // (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) // > 0) { Contact contact = new Contact(); String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); Uri uri = getContactPhotoUri(Long.parseLong(id)); // set photoUri contact.setContactPhotoUri(uri); // set name contact.setContactName(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); // get the phone number Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); while (pCur.moveToNext()) { // set phone munber contact.setContactNumber(pCur.getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); contacts.add(contact); } pCur.close(); // get email and type Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { id }, null); while (emailCur.moveToNext()) { // This would allow you get several email addresses // if the email addresses were stored in an array // set email contact.setContactEmail(emailCur.getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))); contacts.add(contact); } emailCur.close(); } } cur.close(); contactAdapter = new ContactAdapter(this, R.id.contactList, contacts); // } } public Uri getContactPhotoUri(long contactId) { Uri photoUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); photoUri = Uri.withAppendedPath(photoUri, Contacts.Photo.CONTENT_DIRECTORY); return photoUri; }

Mi problema es que todos los contactos, incluidos los contactos de gmail, no quiero que se incluyan los contactos de gmail. Y el tiempo empleado también es muy lento. ¿Cómo optimizo esto? Sé que está tomando tiempo porque estoy usando muchos cursores ... pero no sé cómo hacer un único cusror que pueda darme el nombre número de correo electrónico foto uri ... ¡Gracias!

FINAL ACTUALIZADO:

private void getContacts() { ContentResolver cr = getContentResolver(); Cursor cur = cr.query(Data.CONTENT_URI, new String[] { Data.CONTACT_ID, Data.MIMETYPE, Email.ADDRESS, Contacts.DISPLAY_NAME, Phone.NUMBER }, null, null, Contacts.DISPLAY_NAME); Contact contact; if (cur.getCount() > 0) { while (cur.moveToNext()) { String id = cur.getString(cur.getColumnIndex(Data.CONTACT_ID)); String mimeType = cur.getString(cur.getColumnIndex(Data.MIMETYPE)); if (allContacts.containsKey(id)) { // update contact contact = allContacts.get(id); } else { contact = new Contact(); allContacts.put(id, contact); // set photoUri contact.setContactPhotoUri(getContactPhotoUri(Long.parseLong(id))); } if (mimeType.equals(StructuredName.CONTENT_ITEM_TYPE)) // set name contact.setContactName(cur.getString(cur.getColumnIndex(Contacts.DISPLAY_NAME))); if (mimeType.equals(Phone.CONTENT_ITEM_TYPE)) // set phone munber contact.setContactNumber(cur.getString(cur.getColumnIndex(Phone.NUMBER))); if (mimeType.equals(Email.CONTENT_ITEM_TYPE)) // set email contact.setContactEmail(cur.getString(cur.getColumnIndex(Email.ADDRESS))); } } cur.close(); // get contacts from hashmap contacts.clear(); contacts.addAll(allContacts.values()); // remove null contacts for (Contact _contact : contacts) { if (_contact.getContactName() == null && _contact.getContactNumber() == null && _contact.getContactEmail() == null) { contacts.remove(_contact); break; } } contactAdapter = new ContactAdapter(this, R.id.contactList, contacts); contactAdapter.notifyDataSetChanged(); } public Uri getContactPhotoUri(long contactId) { Uri photoUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); photoUri = Uri.withAppendedPath(photoUri, Contacts.Photo.CONTENT_DIRECTORY); return photoUri; }