Are you Looking for a better library that can fetch all phone contacts easily and that can manage all numbers in common formats. Then LibPhoneNumber library is a better solution because this library is faster then other handmade queries. This library is approved by Google and also used bt WhatsApp and in many apps.
Add compile lib in app gradle file :
compile 'com.googlecode.libphonenumber:libphonenumber:7.0.4'
Create instance of PhoneNumberUtil class like this
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Create instance of static and serialized class named PhoneNumber
Phonenumber.PhoneNumber phNumberProto = null;
Now get you country so that you can manage all contacts according to your country format like this
String countryCode = Locale.getDefault().getCountry();
and then here you can parse all phone number as
try {
phNumberProto = phoneUtil.parse(phoneNumber, countryCode);
} catch (NumberParseException e) {
e.printStackTrace();
AppLogs.printLogs("err", "number parsing err " + phoneNumber);
}
Now you convert phone contacts in International format , National format , E164 format etc like this
if (phNumberProto != null){
boolean isValid = phoneUtil.isValidNumber(phNumberProto);
if (isValid) {
String internationalFormat = phoneUtil.format(phNumberProto, PhoneNumberUtil.PhoneNumberFormat.E164);
data.setmContactNumber(internationalFormat.trim());
AppLogs.printLogs("phone", "phone --> " + internationalFormat);
mListContacts.add(data);
}else{
AppLogs.printLogs("invalid phone", "invalid phone --> ");
}
}
For your help i am sharing complete code hope it will help you
ArrayList<ContactsData> mListContacts = new ArrayList<ContactsData>();
public ArrayList<ContactsData> allPhoneContact(Activity ctx) {
ContentResolver cr = ctx.getContentResolver();
Cursor cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
ContactsData data = new ContactsData();
String name = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER))) > 0) {
if (name.contains("\\s+")){
String [] nameArr = name .split("\\s+");
data.setmContactFName(nameArr[0]);
data.setmContactLName(nameArr[1]);
AppLogs.printLogs("name", "Fname --> " + nameArr[0]);
AppLogs.printLogs("name", "Lname --> " + nameArr[1]);
}else{
data.setmContactFName(name);
data.setmContactLName(" ");
AppLogs.printLogs("name", "name --> " + name);
}
Phonenumber.PhoneNumber phNumberProto = null;
String countryCode = Locale.getDefault().getCountry();
try {
phNumberProto = phoneUtil.parse(phoneNumber, countryCode);
} catch (NumberParseException e) {
e.printStackTrace();
AppLogs.printLogs("err", "number parsing err --> " + phoneNumber);
}
if (phNumberProto != null){
boolean isValid = phoneUtil.isValidNumber(phNumberProto);
if (isValid) {
String internationalFormat = phoneUtil.format(phNumberProto, PhoneNumberUtil.PhoneNumberFormat.E164);
data.setmContactNumber(internationalFormat.trim());
AppLogs.printLogs("phone", "phone --> " + internationalFormat);
mListContacts.add(data);
}else{
AppLogs.printLogs("invalid phone", "invalid phone --> ");
}
}
}
}
cur.close();
}
return mListContacts;
}
1 Comment(s)