Android Fetch Contacts :
Android devices now got plenty of applications i.e., apps that deal with contact numbers available on our devices.The most popular whatsapp is completely based on our contacts also viber, google duo and many more.Today in this tutorial on Android Tutorial Fetching Contacts i will let you know how to fetch them easily.
Not only social networking apps but now even banking based apps like Tez app from Google is also based on contacts.
For more information on Google Tez app visit our reviews page.
Let’s get started..
We will be using a android recyclerview to populate contacts in our device to our app for more visit https://androidcoding.in/recyclerview/
Android Fetch Contacts Video Tutorial :
Go to the below tutorial for indetail explanation of the topic.
Note :
Fetching contacts requires user to give permission from android marshmallow (android 6.0)
So we start from it
First we will check whether the version is greater than or equal to marshmallow or not if greater we request permission from user else we will go on with fetching contacts.
phones = getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); LoadContact loadContact = new LoadContact(); loadContact.execute();
private void showContacts() { // Check the SDK version and whether the permission is already granted or not. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method } else { // Android version is lesser than 6.0 or the permission is already granted. phones = getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); LoadContact loadContact = new LoadContact(); loadContact.execute(); }
If android 6.0 or above then
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);
And the request method checks whether permission is granted or not if not granted it will request for permission.
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission is granted showContacts(); } else { Toast.makeText(this, "Until you grant the permission, we canot display the names", Toast.LENGTH_SHORT).show(); } } }
for more detailed information visit https://androidcoding.in/2017/01/19/android-marshmallow-permissions-requesting-run-time-permissions/
activity_main.xml :
Adding a recyclerview to layout to fetch contacts and display.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/contacts_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/frag" android:clickable="true" /> </LinearLayout>
MainActivity.java :
Initialize the components to fetch contacts and display.
ArrayList<Contacts> selectUsers; private RecyclerView recyclerView; private RecyclerView.LayoutManager layoutManager; RecyclerAdapter adapter; Cursor phones; private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
Load Contacts from device
String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
class LoadContact extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Void doInBackground(Void... voids) { // Get Contact list from Phone if (phones != null) { Log.e("count", "" + phones.getCount()); if (phones.getCount() == 0) { } while (phones.moveToNext()) { Bitmap bit_thumb = null; String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Contacts selectUser = new Contacts(); selectUser.setName(name); selectUser.setPhone(phoneNumber); selectUsers.add(selectUser); } } else { Log.e("Cursor close 1", "----------------"); } return null; }
Android Fetch Contacts Full Coding :
Providing the full code Fetch Contacts and display it onto the screen.
package com.androidcoding.contacts; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.provider.ContactsContract; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Toast; import com.google.gson.Gson; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { ArrayList<Contacts> selectUsers; private RecyclerView recyclerView; private RecyclerView.LayoutManager layoutManager; RecyclerAdapter adapter; Cursor phones; private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.contacts_list); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(layoutManager); selectUsers = new ArrayList<Contacts>(); showContacts(); } private void showContacts() { // Check the SDK version and whether the permission is already granted or not. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method } else { // Android version is lesser than 6.0 or the permission is already granted. phones = getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); LoadContact loadContact = new LoadContact(); loadContact.execute(); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission is granted showContacts(); } else { Toast.makeText(this, "Until you grant the permission, we canot display the names", Toast.LENGTH_SHORT).show(); } } } class LoadContact extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Void doInBackground(Void... voids) { // Get Contact list from Phone if (phones != null) { Log.e("count", "" + phones.getCount()); if (phones.getCount() == 0) { } while (phones.moveToNext()) { Bitmap bit_thumb = null; String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Contacts selectUser = new Contacts(); selectUser.setName(name); selectUser.setPhone(phoneNumber); selectUsers.add(selectUser); } } else { Log.e("Cursor close 1", "----------------"); } return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); // sortContacts(); int count=selectUsers.size(); ArrayList<Contacts> removed=new ArrayList<>(); ArrayList<Contacts> contacts=new ArrayList<>(); for(int i=0;i<selectUsers.size();i++){ Contacts inviteFriendsProjo = selectUsers.get(i); if(inviteFriendsProjo.getName().matches("\\d+(?:\\.\\d+)?")||inviteFriendsProjo.getName().trim().length()==0){ removed.add(inviteFriendsProjo); Log.d("Removed Contact",new Gson().toJson(inviteFriendsProjo)); }else{ contacts.add(inviteFriendsProjo); } } contacts.addAll(removed); selectUsers=contacts; adapter = new RecyclerAdapter(inflater, selectUsers); recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); recyclerView.setAdapter(adapter); } } }
Contacts.Java :
Create a pojo class to handle contacts
package com.androidcoding.contacts; /** * Created by Android on 8/23/2017. */ public class Contacts { String name; String phone; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
contactlist_row.xml :
Add name and phone fields, you can also add email and many more depending upon your requirement.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/contact_select_layout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/white" android:descendantFocusability="blocksDescendants" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Name" android:textColor="#6C6C6C" android:textSize="20dp" /> <TextView android:id="@+id/no" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Phone no." android:textColor="#cecece" android:textSize="18dp" /> </LinearLayout>
RecyclerAdapter :
package com.androidcoding.contacts; /** * Created by Android on 9/6/2017. */ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import java.util.Locale; public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { private LayoutInflater layoutInflater; public List<Contacts> cont; Contacts list; private ArrayList<Contacts> arraylist; boolean checked = false; View vv; public RecyclerAdapter(LayoutInflater inflater, List<Contacts> items) { this.layoutInflater = inflater; this.cont = items; this.arraylist = new ArrayList<Contacts>(); this.arraylist.addAll(cont); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = layoutInflater.inflate(R.layout.contactlist_row, parent, false); ViewHolder viewHolder = new ViewHolder(v); return viewHolder; } @Override public void onBindViewHolder(final ViewHolder holder, final int position) { list = cont.get(position); String name = (list.getName()); holder.title.setText(name); holder.phone.setText(list.getPhone()); } @Override public int getItemCount() { return cont.size(); } class ViewHolder extends RecyclerView.ViewHolder { public TextView title; public TextView phone; public LinearLayout contact_select_layout; public ViewHolder(View itemView) { super(itemView); this.setIsRecyclable(false); title = (TextView) itemView.findViewById(R.id.name); phone = (TextView) itemView.findViewById(R.id.no); contact_select_layout = (LinearLayout) itemView.findViewById(R.id.contact_select_layout); } } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { return position; } }
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”light” text_orientation=”left” use_border_color=”off” border_color=”#ffffff” border_style=”solid”]
AndroidManifest.xml :
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androidcoding.contacts"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.androidcoding.contacts.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Android Fetch Contacts Output :
The screen below depicts Android Tutorial on Fetch Contacts.
If you like the above android app development tutorial on Android Tutorial on Fetch Contacts do like us and share this tutorial.If you have any query do let us know in the comment section below.