dzięki za pomoc, jak mogę wyświetlić całą nazwę w ListView? (że będę mógł zobaczyć wszystkie nazwy kontaktów w moim telefonie w innym oknie)? dzięki
fsdf fsd
4
Z jakiegoś powodu ten kod powoduje dwukrotne uzyskanie każdego kontaktu. Czy wiesz, dlaczego?
Andrew No
1
@Aerrow czasami uzyskuje się dwa kontakty. Czy rozwiązujesz ten problem?
Suman
3
nie zapomnij zamknąć kursora!
MikeL
14
NIE używaj tego kodu. Pyta o wszystkie kontakty, a następnie wykonuje dodatkowe zapytanie dla każdego pojedynczego kontaktu. Straszna wydajność - uruchomienie na prawdziwym urządzeniu może zająć ponad 10 sekund.
Wasilij
15
publicclassMyActivityextendsActivityimplementsLoaderManager.LoaderCallbacks<Cursor>{privatestaticfinalint CONTACTS_LOADER_ID =1;@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.main);// Prepare the loader. Either re-connect with an existing one,// or start a new one.
getLoaderManager().initLoader(CONTACTS_LOADER_ID,null,this);}@OverridepublicLoader<Cursor> onCreateLoader(int id,Bundle args){// This is called when a new Loader needs to be created.if(id == CONTACTS_LOADER_ID){return contactsLoader();}returnnull;}@Overridepublicvoid onLoadFinished(Loader<Cursor> loader,Cursor cursor){//The framework will take care of closing the// old cursor once we return.List<String> contacts = contactsFromCursor(cursor);}@Overridepublicvoid onLoaderReset(Loader<Cursor> loader){// This is called when the last Cursor provided to onLoadFinished()// above is about to be closed. We need to make sure we are no// longer using it.}privateLoader<Cursor> contactsLoader(){Uri contactsUri =ContactsContract.Contacts.CONTENT_URI;// The content URI of the phone contactsString[] projection ={// The columns to return for each rowContactsContract.Contacts.DISPLAY_NAME};String selection =null;//Selection criteriaString[] selectionArgs ={};//Selection criteriaString sortOrder =null;//The sort order for the returned rowsreturnnewCursorLoader(
getApplicationContext(),
contactsUri,
projection,
selection,
selectionArgs,
sortOrder);}privateList<String> contactsFromCursor(Cursor cursor){List<String> contacts =newArrayList<String>();if(cursor.getCount()>0){
cursor.moveToFirst();do{String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contacts.add(name);}while(cursor.moveToNext());}return contacts;}}
Niezłe użycie CursorLoader. Czy wiesz, jak pobrać numery telefonów z każdego z tych kontaktów w CursorLoader?
Felker
1
Możesz zaimplementować LoaderManager.LoaderCallbacks <Contact> zamiast LoaderManager.LoaderCallbacks <Cursor>. Gdzie „Kontakt” to Twoja niestandardowa jednostka.
Artem
1
@Artyom Czy możesz wyjaśnić, jak uzyskać część dotyczącą numeru telefonu?
hushed_voice
15
Uzyskaj informacje o kontaktach, kontakty ze zdjęciami, uri zdjęć i przekonwertuj do modelu Class
privatevoid getPhoneNumbers(){Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);// Loop Through All The Numberswhile(phones.moveToNext()){String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));// Cleanup the phone number
phoneNumber = phoneNumber.replaceAll("[()\\s-]+","");// Enter Into Hash Map
namePhoneMap.put(phoneNumber, name);}// Get The Contents of Hash Map in Logfor(Map.Entry<String,String> entry : namePhoneMap.entrySet()){String key = entry.getKey();Log.d(TAG,"Phone :"+ key);Stringvalue= entry.getValue();Log.d(TAG,"Name :"+value);}
phones.close();}
Pamiętaj, że w powyższym przykładzie kluczem jest numer telefonu, a wartością jest nazwa, więc przeczytaj zawartość, na przykład 998xxxxx282-> Mahatma Gandhi zamiast Mahatma Gandhi-> 998xxxxx282
@gunner_dev, napisz nową odpowiedź, jeśli jesteś pewien, że ta odpowiedź wraz z edycją zadziała.
Bö macht Blau
2
Jest to metoda uzyskiwania nazwy i numeru listy kontaktów
privatevoid getAllContacts(){ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME +" ASC");if(cursor.getCount()>0){while(cursor.moveToNext()){int hasPhoneNumber =Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));if(hasPhoneNumber >0){String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",newString[]{id},null);if(phoneCursor !=null){if(phoneCursor.moveToNext()){String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));//At here You can add phoneNUmber and Name to you listView ,ModelClass,Recyclerview
phoneCursor.close();}}}}}}
Odpowiedzi:
Spróbuj tego też,
Jeśli potrzebujesz więcej informacji, skorzystaj z tego łącza Przeczytaj listę kontaktów
źródło
i nie zapomnij
źródło
Uzyskaj informacje o kontaktach, kontakty ze zdjęciami, uri zdjęć i przekonwertuj do modelu Class
1). Przykładowy model klasy:
2). pobierz Kontakty i przekonwertuj na Model
źródło
Poprawa odpowiedzi @Adiii - wyczyści numer telefonu i usunie wszystkie duplikaty
Zadeklaruj zmienną globalną
Następnie użyj poniższej funkcji
Pamiętaj, że w powyższym przykładzie kluczem jest numer telefonu, a wartością jest nazwa, więc przeczytaj zawartość, na przykład 998xxxxx282-> Mahatma Gandhi zamiast Mahatma Gandhi-> 998xxxxx282
źródło
Rezultatem będzie tablicaNameFromContacts pełna kontaktów. Upewnij się również, że dodałeś
w main.xml
źródło
PhoneLookup.NUMBER
nie jest kolumną wContactsContract.Contacts.CONTENT_URI
,numberFieldColumnIndex
zawsze zwraca-1
.Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phones.close();
Jest to metoda uzyskiwania nazwy i numeru listy kontaktów
źródło
źródło
zdobądź wszystkie kontakty w mniej niż sekundę i bez obciążenia w swojej działalności - podążaj za moimi krokami działa jak urok.
Łączność
Korzyści
źródło