Monday, December 4, 2017

[Android-Xamarin] Get contacts info

 public class ContactAdapter : BaseAdapter<ContactItem>, ActivityCompat.IOnRequestPermissionsResultCallback  
 {  
      private static int PERMISSIONS_REQUEST_READ_CONTACTS = 100;  
      public List<ContactItem> _contactList;  
      public List<ContactItem> _filterContactList;  
      Activity context = null;  
      public ContactAdapter(Activity context, string keySearch) : base ()  
      {  
           this.context = context;  
           if(_contactList?.Count == 0 || string.IsNullOrEmpty(keySearch))  
           {  
                FillContacts();  
           }  
           else  
           {  
                _filterContactList = _contactList.Where(x => x.Name.ToUpper().Contains(keySearch.ToUpper()) ||   
                          x.Number.Trim().Replace("(", "").Replace(")", "").Replace("-", "").Contains(keySearch)).OrderBy(x => x.Name).ToList();  
           }  
      }  
      public override ContactItem this[int position]  
      {  
           get { return _filterContactList[position]; }  
      }  
      public override int Count  
      {  
           get { return _filterContactList != null ? _filterContactList.Count : 0; }  
      }  
      public override long GetItemId(int position)  
      {  
           return _filterContactList[position].Id;  
      }  
      public override View GetView(int position, View convertView, ViewGroup parent)  
      {  
           var item = _filterContactList[position];  
           if (convertView == null)  
                convertView = context.LayoutInflater.Inflate(Resource.Layout.ContactsItem, null);  
           convertView.FindViewById<TextView>(Resource.Id.txtName).Text = item.Name;  
           convertView.FindViewById<TextView>(Resource.Id.txtNumber).Text = item.Number;  
           return convertView;  
      }  
      public void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)  
      {  
           if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS)  
           {  
                if (grantResults[0] == Permission.Granted)  
                {  
                     // Permission is granted  
                     FillContacts();  
                }  
                else  
                {  
                     Toast.MakeText(this.context, "Vui lòng check lại quyền truy cập danh bạ!", ToastLength.Long).Show();  
                }  
           }  
      }  
      void FillContacts()  
      {  
           _contactList = new List<ContactItem>();  
           _filterContactList = new List<ContactItem>();  
           ContentResolver resolver = context.ContentResolver;  
           Uri uri = ContactsContract.CommonDataKinds.Phone.ContentUri;  
           string[] projection = new string[] {ContactsContract.CommonDataKinds.Phone.InterfaceConsts.DisplayName,  
                ContactsContract.CommonDataKinds.Phone.Number};  
           ICursor people = resolver.Query(uri, projection, null, null, null);  
           int indexName = people.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.DisplayName);  
           int indexNumber = people.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number);  
           if (people.MoveToFirst())  
           {  
                do  
                {  
                     string name = people.GetString(indexName);  
                     string number = people.GetString(indexNumber);  
                     _contactList.Add(new ContactItem  
                     {  
                          Name = people.GetString(indexName),  
                          Number = people.GetString(indexNumber)  
                     });  
                     // Do work...  
                } while (people.MoveToNext());  
           }  
           _filterContactList = _contactList.OrderBy(x => x.Name).ToList();  
      }  
 }  

No comments:
Write comments