Sto tentando di salvare tutti i numeri di telefono dei contatti in un arraylist ma non riesco a trovare un modo come. C'è un modo per ottenerli invece di prenderli uno per uno con ContactsContract?Android ottiene tutti i numeri di telefono dei contatti in ArrayList
risposta
ContentResolver cr = mContext.getContentResolver(); //Activity/Application android.content.Context
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if(cursor.moveToFirst())
{
ArrayList<String> alContacts = new ArrayList<String>();
do
{
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{ id }, null);
while (pCur.moveToNext())
{
String contactNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
alContacts.add(contactNumber);
break;
}
pCur.close();
}
} while (cursor.moveToNext()) ;
}
Grazie! Ha funzionato! –
Che cos'è 'contResv'? – tipycalFlow
contResv è un'istanza di ContentResolver, è possibile ottenere chiamando il metodo getContentResolver() della classe android.content.Context – Santhosh
Prova questo:
Cursor managedCursor = getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[] {Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER}, null, null, Phone.DISPLAY_NAME + " ASC");
E attraversando tramite il cursore, è possibile memorizzare tutti questi dati in qualsiasi struttura di dati di vostra scelta.
Questa è la soluzione più veloce di gran lunga. – milosmns
Non capisco perché le altre risposte con i doppi loop si trovano ovunque mentre questa soluzione è molto più pulita! –
Prova anche a ottenere tutti i contatti.
Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI, null , null , null,
"upper("+Phone.DISPLAY_NAME + ") ASC");
Questo codice funzionerà molto più velocemente del codice nella risposta, perché non si effettua una query aggiuntiva per ogni contatto.
private static final String CONTACT_ID = ContactsContract.Contacts._ID;
private static final String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
private static final String PHONE_NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
private static final String PHONE_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
public static ArrayList<String> getAll(Context context) {
ContentResolver cr = context.getContentResolver();
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{PHONE_NUMBER, PHONE_CONTACT_ID},
null,
null,
null
);
if(pCur != null){
if(pCur.getCount() > 0) {
HashMap<Integer, ArrayList<String>> phones = new HashMap<>();
while (pCur.moveToNext()) {
Integer contactId = pCur.getInt(pCur.getColumnIndex(PHONE_CONTACT_ID));
ArrayList<String> curPhones = new ArrayList<>();
if (phones.containsKey(contactId)) {
curPhones = phones.get(contactId);
}
curPhones.add(pCur.getString(pCur.getColumnIndex(PHONE_NUMBER)));
phones.put(contactId, curPhones);
}
Cursor cur = cr.query(
ContactsContract.Contacts.CONTENT_URI,
new String[]{CONTACT_ID, HAS_PHONE_NUMBER},
HAS_PHONE_NUMBER + " > 0",
null,null);
if (cur != null) {
if (cur.getCount() > 0) {
ArrayList<String> contacts = new ArrayList<>();
while (cur.moveToNext()) {
int id = cur.getInt(cur.getColumnIndex(CONTACT_ID));
if(phones.containsKey(id)) {
contacts.addAll(phones.get(id));
}
}
return contacts;
}
cur.close();
}
}
pCur.close();
}
return null;
}
Non c'è niente qui, non usi mai PHONE_NUMBER. Penso che tu abbia PHONE_CONTACT_ID dove dovresti avere PHONE_NUMBER –
@GregEnnis Non riesco a controllarlo ora, ma penso che tu abbia ragione. Modificherò la mia risposta –
Oltre a ciò, il codice funziona alla grande. Grazie –
- 1. Modo efficiente per caricare tutti i contatti e tutti i numeri di telefono (Android 2.0)
- 2. Ottenere tutti i nomi dei contatti e numeri come un elenco di stringhe su Android
- 3. Confronto dei numeri di telefono in Android
- 4. Ottieni contatti aggiornati in Android per la sincronizzazione dei contatti
- 5. Come ottenere i contatti il numero di telefono in Android
- 6. Come scegliere i contatti solo da contatti google (non facebook ecc.) Con numeri di telefono?
- 7. Come scegliere un numero di telefono con la finestra di dialogo dei contatti di Android
- 8. Visualizzazione di contatti solo con numeri di telefono utilizzando ACTION_PICK intento nel dispositivo Android
- 9. Contatti di recupero Android nell'applicazione
- 10. Elenco di tutti i codici di paese dei numeri di telefono
- 11. Android 3.0 - Come recuperare TUTTI i contatti tramite ContactsContract
- 12. SQLite contatti estratto Android con numero di telefono
- 13. Come recuperare i numeri di cellulare dai contatti iPhone.
- 14. Intenzione per i contatti con il numero di telefono
- 15. controllando il numero di telefono presente nella lista dei contatti in Android
- 16. Inserimento programmato di nuovi contatti Android nel telefono
- 17. Android Contact Picker con soli numeri di telefono
- 18. Leggi numeri telefonici di contatto in Android
- 19. Come ottenere contatti preferiti in Android
- 20. Formattazione dei numeri di telefono in base al prefisso internazionale
- 21. NSTextCheckingResult per i numeri di telefono
- 22. Java ArrayList per i numeri interi
- 23. Android: controllare il numero di telefono presente nella lista dei contatti? (Numero di telefono recuperare dalla telefonata)
- 24. Ionic ottiene il numero di telefono dell'utente
- 25. Come ottenere i contatti associati ai social media (google, yahoo, ...) sincronizzati con il telefono, in Android
- 26. PhoneGap: Elenco dei contatti Ordinamento
- 27. Il campo indirizzo memorizzerà più numeri di telefono quando invio un sms a più numeri di telefono contemporaneamente?
- 28. Come recuperare solo i numeri di cellulare in rapido utilizzando i contatti di CNC?
- 29. Come leggere i contatti sim Android e i contatti telefonici separatamente
- 30. yii convalida un array di input dei numeri di telefono
cosa è ContactsContract – PSR
Questa domanda ha già una risposta nel thread [This] [1]. Per favore controlla. [1]: http://stackoverflow.com/a/12562234/1773155 –
soddisferà sicuramente le vostre esigenze utilizzando [libreria di android-contact-extractor] (https://github.com/nitiwari-dev/android- estrattore di contatto) – nitesh