terima kasih atas bantuannya, bagaimana saya bisa menampilkan semua nama di ListView? (bahwa saya akan dapat melihat semua nama kontak di telepon saya di jendela lain)? terima kasih
fsdf fsd
4
Untuk beberapa alasan kode ini membuat setiap kontak dua kali. Apakah Anda tahu alasannya?
Andrew No
1
@Aerrow beberapa kali mendapatkan beberapa kontak dua kali. Apakah Anda memecahkan masalah ini?
Suman
3
jangan lupa tutup kursornya!
MikeL
13
JANGAN gunakan kode ini. Ini membuat kueri untuk semua kontak, dan kemudian menjalankan kueri tambahan untuk setiap kontak tunggal. Performa buruk - mungkin butuh lebih dari 10 detik untuk dijalankan di perangkat nyata.
Vasiliy
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;}}
Penggunaan CursorLoader yang bagus. Tahukah Anda cara menarik nomor telepon dari masing-masing kontak tersebut di dalam CursorLoader?
Felker
1
Anda dapat mengimplementasikan LoaderManager.LoaderCallbacks <Contact> sebagai gantinya LoaderManager.LoaderCallbacks <Cursor>. Di mana 'Kontak' adalah entitas kustom Anda.
Artyom
1
@Artyom Bisakah Anda menjelaskan sedikit tentang cara mendapatkan bagian nomor telepon?
hushed_voice
15
Dapatkan info kontak, kontak foto, foto uri dan konversikan ke model Kelas
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();}
Ingat pada contoh di atas kuncinya adalah nomor telepon dan nilai adalah nama jadi baca konten Anda seperti 998xxxxx282-> Mahatma Gandhi bukan Mahatma Gandhi-> 998xxxxx282
terima kasih banyak saya akan mencobanya, jika saya memiliki pertanyaan lebih lanjut saya akan bertanya kepada Anda
fsdf fsd
terima kasih atas bantuannya, bagaimana saya bisa menampilkan semua nama di ListView? (bahwa saya akan dapat melihat semua nama kontak di telepon saya di jendela lain)? terima kasih
fsdf fsd
6
Jawaban ini salah. PhoneLookup.NUMBERbukan kolom ContactsContract.Contacts.CONTENT_URI, numberFieldColumnIndexselalu kembali -1.
cprcrack
2
Seharusnya seperti ini: 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();
user1510006
1
@gunner_dev tolong tulis jawaban baru jika Anda yakin jawaban ini termasuk suntingan Anda akan berhasil.
Bö macht Blau
2
Ini adalah Metode untuk mendapatkan Nama dan Nomor daftar kontak
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();}}}}}}
Jawaban:
Coba ini juga,
Jika Anda membutuhkan lebih banyak referensi berarti merujuk tautan ini Baca Daftar Kontak
sumber
dan jangan lupa
sumber
Dapatkan info kontak, kontak foto, foto uri dan konversikan ke model Kelas
1). Contoh untuk model Kelas:
2). dapatkan Kontak dan konversikan ke Model
sumber
Memperbaiki jawaban @Adiii - Ini Akan Membersihkan Nomor Telepon dan Menghapus Semua Duplikat
Nyatakan Variabel Global
Kemudian Gunakan Fungsi Di Bawah Ini
Ingat pada contoh di atas kuncinya adalah nomor telepon dan nilai adalah nama jadi baca konten Anda seperti 998xxxxx282-> Mahatma Gandhi bukan Mahatma Gandhi-> 998xxxxx282
sumber
Hasilnya akan menjadi array aNameFromContacts yang penuh dengan kontak. Juga pastikan bahwa Anda telah menambahkan
di main.xml
sumber
PhoneLookup.NUMBER
bukan kolomContactsContract.Contacts.CONTENT_URI
,numberFieldColumnIndex
selalu kembali-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();
Ini adalah Metode untuk mendapatkan Nama dan Nomor daftar kontak
sumber
sumber
dapatkan semua kontak dalam waktu kurang dari satu detik dan tanpa beban apa pun dalam aktivitas Anda - ikuti langkah saya berfungsi seperti pesona.
Kontak
Manfaat
sumber