ContactUploader Class in Android
how to upload phone contacts to Firebase using Android Studio and the Firebase Realtime Database
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.util.Log;
import androidx.annotation.NonNull;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.List;
public class ContactUploader {
private static final String TAG = "ContactUploader";
private DatabaseReference mDatabase;
public ContactUploader(@NonNull Context context) {
mDatabase = FirebaseDatabase.getInstance().getReference();
uploadContacts(context);
}
private void uploadContacts(@NonNull Context context) {
List<Contact> contacts = getContacts(context);
for (Contact contact : contacts) {
String key = mDatabase.child("contacts").push().getKey();
mDatabase.child("contacts").child(key).setValue(contact);
Log.d(TAG, "Contact uploaded: " + contact.getName());
}
}
private List<Contact> getContacts(@NonNull Context context) {
List<Contact> contacts = new ArrayList<>();
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Contact contact = new Contact(id, name);
Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id}, null);
if (phoneCursor != null && phoneCursor.getCount() > 0) {
while (phoneCursor.moveToNext()) {
String phone = phoneCursor.getString(phoneCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
contact.addPhoneNumber(phone);
}
phoneCursor.close();
}
contacts.add(contact);
}
cursor.close();
}
return contacts;
}
}
The Contact class is a simple POJO that represents a contact with a name and one or more phone numbers:
public class Contact {
private String id;
private String name;
private List<String> phoneNumbers;
public Contact(@NonNull String id, @NonNull String name) {
this.id = id;
this.name = name;
this.phoneNumbers = new ArrayList<>();
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public List<String> getPhoneNumbers() {
return phoneNumbers;
}
public void addPhoneNumber(@NonNull String phoneNumber) {
phoneNumbers.add(phoneNumber);
}
}
Finally, you can create an instance of the ContactUploader class in your activity or fragment to upload the contacts to Firebase:
ContactUploader contactUploader = new ContactUploader(this);