首页

读取手机通讯录(联系人)android源代码

java

2020-6-20

package huahua.mycontacts;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;


import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
	//联系人包含的信息
	public static class Persons {
		public String Name;  //姓名
		public String PY;      //姓名拼音 (花花大神:huahuadashen)
		public String Number;      //电话号码
		public String FisrtSpell;      //中文名首字母 (花花大神:hhds)
	} 
	//字母列视图View
	private AlphabetScrollBar m_asb;
	//显示选中的字母
	private TextView m_letterNotice;
	//联系人的列表
	private ListView m_contactslist;
	//联系人列表的适配器
	private ListAdapter m_listadapter;
	//所有联系人数组
	private ArrayList<Persons> persons = new ArrayList<Persons>();
	//搜索过滤联系人EditText
	private EditText m_FilterEditText;
	//没有匹配联系人时显示的TextView
	private TextView m_listEmptyText;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//获取手机中的联系人,并将所有联系人保存perosns数组中
		//联系人比较多的话,初始化中会比较耗时,以后再优化
		getContacts();
		//得到字母列的对象,并设置触摸响应监听器
		m_asb = (AlphabetScrollBar)findViewById(R.id.alphabetscrollbar);
		m_asb.setOnTouchBarListener(new ScrollBarListener());
		m_letterNotice = (TextView)findViewById(R.id.pb_letter_notice);
		m_asb.setTextView(m_letterNotice);
		
		// 根据拼音为联系人数组进行排序
		Collections.sort(persons, new ComparatorPY());
		
		//得到联系人列表,并设置适配器
		m_contactslist = (ListView)findViewById(R.id.pb_listvew);
		m_listadapter = new ListAdapter(this, persons);
		m_contactslist.setAdapter(m_listadapter);
		
		m_listEmptyText = (TextView)findViewById(R.id.pb_nocontacts_notice);
		
    	//初始化搜索编辑框,设置文本改变时的监听器
		m_FilterEditText = (EditText)findViewById(R.id.pb_search_edit);
		m_FilterEditText.addTextChangedListener(new TextWatcher() {
			
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
					
				if(!"".equals(s.toString().trim()))
				{  
					//根据编辑框值过滤联系人并更新联系列表
					filterContacts(s.toString().trim());
					m_asb.setVisibility(View.GONE);
				}
				else
				{
					m_asb.setVisibility(View.VISIBLE);
					m_listadapter.updateListView(persons);
				}
			}
			
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void afterTextChanged(Editable s) {
				// TODO Auto-generated method stub
				
			}
		});
	}
	
	public class ComparatorPY implements Comparator<Persons>{

		@Override
		public int compare(Persons lhs, Persons rhs) {
			String str1 = lhs.PY;
			String str2 = rhs.PY;
			return str1.compareToIgnoreCase(str2);
		}
	}
	
	public class ListAdapter extends BaseAdapter{
		private LayoutInflater m_inflater;
		private ArrayList<Persons> Persons;
    	private Context context;
		
        public ListAdapter(Context context,
        		ArrayList<Persons> persons) {
    	    this.m_inflater = LayoutInflater.from(context);
    	    this.Persons = persons;
    	    this.context = context;
        }
        
    	//当联系人列表数据发生变化时,用此方法来更新列表
    	public void updateListView(ArrayList<Persons> persons){
    		this.Persons = persons;
    		notifyDataSetChanged();
    	}

		
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return Persons.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return Persons.get(position);
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
            convertView = m_inflater.inflate(R.layout.list_item, null);
            
            TextView name = (TextView) convertView.findViewById(R.id.contacts_name);
            name.setText(Persons.get(position).Name);
    	    
            TextView number = (TextView) convertView.findViewById(R.id.contacts_number);
            number.setText(Persons.get(position).Number);
            
			//字母提示textview的显示 
			TextView letterTag = (TextView)convertView.findViewById(R.id.pb_item_LetterTag);
			//获得当前姓名的拼音首字母
			String firstLetter = Persons.get(position).PY.substring(0,1).toUpperCase();
			
			//如果是第1个联系人 那么letterTag始终要显示
			if(position == 0)
			{
				letterTag.setVisibility(View.VISIBLE);
				letterTag.setText(firstLetter);
			}			
			else
			{
				//获得上一个姓名的拼音首字母
				String firstLetterPre = Persons.get(position-1).PY.substring(0,1).toUpperCase();
				//比较一下两者是否相同
				if(firstLetter.equals(firstLetterPre))
				{
					letterTag.setVisibility(View.GONE);
				}
				else 
				{
					letterTag.setVisibility(View.VISIBLE);
					letterTag.setText(firstLetter);
				}
			}

			return convertView;
		}
		
	}
	
	//字母列触摸的监听器
	private class ScrollBarListener implements AlphabetScrollBar.OnTouchBarListener {

		@Override
		public void onTouch(String letter) {
			
			//触摸字母列时,将联系人列表更新到首字母出现的位置
	        for (int i = 0;   i < persons.size(); i  ) {  
	            if (persons.get(i).PY.substring(0, 1).compareToIgnoreCase(letter) == 0) { 
	            	m_contactslist.setSelection(i);
	            	break;
	            }  
	        } 
		}
	}
	
    public void getContacts() {
            ContentResolver contentResolver = getContentResolver();
            // 获得所有联系人数据集的游标
            Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI ,null, null, null, null);
            // 循环遍历
            if (cursor.moveToFirst()) {
                    
                    int idColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID);
                    int displayNameColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                    int NumberColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);

                    while (cursor.moveToNext()){
                    		Persons person = new Persons();
                            // 获得联系人的ID号
                            String contactId = cursor.getString(idColumn);

                            // 获得联系人姓名
                            person.Name = cursor.getString(displayNameColumn);
                            person.PY = PinyinUtils.getPingYin(person.Name);
                            person.FisrtSpell = PinyinUtils.getFirstSpell(person.Name);
                            person.Number = cursor.getString(NumberColumn);
                            Log.v("huahua", "名字:" person.Name   "号码:" person.Number   "姓名首字母:" person.FisrtSpell );

                            persons.add(person);
                    }
                    cursor.close();
            }
    }
    
	private void filterContacts(String filterStr){
		ArrayList<Persons> filterpersons = new ArrayList<Persons>();
		
        //遍历所有联系人数组,筛选出包含关键字的联系人
        for (int i = 0; i < persons.size(); i  ) {  
            //过滤的条件
              if (isStrInString(persons.get(i).Number,filterStr)
            		||isStrInString(persons.get(i).PY,filterStr)
            		||persons.get(i).Name.contains(filterStr)
            		||isStrInString(persons.get(i).FisrtSpell,filterStr)){
                //将筛选出来的联系人重新添加到filterpersons数组中
            	Persons filterperson = new Persons();
            	filterperson.Name = persons.get(i).Name;
            	filterperson.PY = persons.get(i).PY;
            	filterperson.Number = persons.get(i).Number;
            	filterperson.FisrtSpell = persons.get(i).FisrtSpell;
            	filterpersons.add(filterperson);
            }  
        }  
        
        //如果没有匹配的联系人
		if(filterpersons.isEmpty())
		{
			m_contactslist.setEmptyView(m_listEmptyText);
		}
        
        //将列表更新为过滤的联系人
        m_listadapter.updateListView(filterpersons);
	}
	
	public boolean isStrInString(String bigStr,String smallStr){
		  if(bigStr.toUpperCase().indexOf(smallStr.toUpperCase())>-1){
			  return true;
		  }else{
			  return false;
		  }
		 }

}

资源下载此资源下载价格为3D币(VIP免费),请先
资源文件列表
Android手机通讯录下载/MyContacts/.classpath , 475
Android手机通讯录下载/MyContacts/.project , 846
Android手机通讯录下载/MyContacts/.settings/org.eclipse.jdt.core.prefs , 177
Android手机通讯录下载/MyContacts/AndroidManifest.xml , 1007
Android手机通讯录下载/MyContacts/bin/AndroidManifest.xml , 1007
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/AlphabetScrollBar$OnTouchBarListener.class , 287
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/AlphabetScrollBar.class , 4307
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/BuildConfig.class , 343
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/MainActivity$1.class , 1949
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/MainActivity$ComparatorPY.class , 1217
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/MainActivity$ListAdapter.class , 3024
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/MainActivity$Persons.class , 477
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/MainActivity$ScrollBarListener.class , 1587
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/MainActivity.class , 6190
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/PinyinUtils.class , 3201
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$attr.class , 337
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$dimen.class , 458
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$drawable.class , 578
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$id.class , 704
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$layout.class , 433
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$menu.class , 385
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$string.class , 469
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R$style.class , 428
Android手机通讯录下载/MyContacts/bin/classes/huahua/mycontacts/R.class , 663
Android手机通讯录下载/MyContacts/bin/classes.dex , 687028
Android手机通讯录下载/MyContacts/bin/dexedLibs/android-support-v4-4dcee1d6260dabab5fdb39804a75f9ea.jar , 189231
Android手机通讯录下载/MyContacts/bin/dexedLibs/android-support-v4-cc0747d6af5d388ce4e2ca8de5e8bd86.jar , 189231
Android手机通讯录下载/MyContacts/bin/dexedLibs/pinyin4j-2.5.0-1ec625bf83aa69061a165aab002c0cfc.jar , 144643
Android手机通讯录下载/MyContacts/bin/dexedLibs/pinyin4j-2.5.0-71a905a07178087456dd886afc25ca9b.jar , 144643
Android手机通讯录下载/MyContacts/bin/jarlist.cache , 120
Android手机通讯录下载/MyContacts/bin/MyContacts.apk , 388799
Android手机通讯录下载/MyContacts/bin/res/drawable-hdpi/ic_launcher.png , 5964
Android手机通讯录下载/MyContacts/bin/res/drawable-hdpi/pb_search_contacts.png , 598
Android手机通讯录下载/MyContacts/bin/res/drawable-hdpi/toast_letter_bg.png , 2404
Android手机通讯录下载/MyContacts/bin/res/drawable-mdpi/ic_launcher.png , 3112
Android手机通讯录下载/MyContacts/bin/res/drawable-xhdpi/ic_launcher.png , 9355
Android手机通讯录下载/MyContacts/bin/res/drawable-xxhdpi/ic_launcher.png , 17889
Android手机通讯录下载/MyContacts/bin/resources.ap_ , 50128
Android手机通讯录下载/MyContacts/gen/huahua/mycontacts/BuildConfig.java , 159
Android手机通讯录下载/MyContacts/gen/huahua/mycontacts/R.java , 3299
Android手机通讯录下载/MyContacts/ic_launcher-web.png , 51394
Android手机通讯录下载/MyContacts/libs/android-support-v4.jar , 484258
Android手机通讯录下载/MyContacts/libs/pinyin4j-2.5.0.jar , 188920
Android手机通讯录下载/MyContacts/proguard-project.txt , 781
Android手机通讯录下载/MyContacts/project.properties , 563
Android手机通讯录下载/MyContacts/res/drawable-hdpi/ic_launcher.png , 7658
Android手机通讯录下载/MyContacts/res/drawable-hdpi/pb_search_contacts.png , 598
Android手机通讯录下载/MyContacts/res/drawable-hdpi/search_bar_edit_normal.9.png , 1801
Android手机通讯录下载/MyContacts/res/drawable-hdpi/search_bar_edit_pressed.9.png , 1935
Android手机通讯录下载/MyContacts/res/drawable-hdpi/Thumbs.db , 12800
Android手机通讯录下载/MyContacts/res/drawable-hdpi/toast_letter_bg.png , 5121
Android手机通讯录下载/MyContacts/res/drawable-mdpi/ic_launcher.png , 3777
Android手机通讯录下载/MyContacts/res/drawable-xhdpi/ic_launcher.png , 12516
Android手机通讯录下载/MyContacts/res/drawable-xxhdpi/ic_launcher.png , 24777
Android手机通讯录下载/MyContacts/res/layout/activity_main.xml , 2171
Android手机通讯录下载/MyContacts/res/layout/list_item.xml , 1135
Android手机通讯录下载/MyContacts/res/menu/main.xml , 263
Android手机通讯录下载/MyContacts/res/values/dimens.xml , 220
Android手机通讯录下载/MyContacts/res/values/strings.xml , 232
Android手机通讯录下载/MyContacts/res/values/styles.xml , 697
Android手机通讯录下载/MyContacts/res/values-sw600dp/dimens.xml , 203
Android手机通讯录下载/MyContacts/res/values-sw720dp-land/dimens.xml , 277
Android手机通讯录下载/MyContacts/res/values-v11/styles.xml , 334
Android手机通讯录下载/MyContacts/res/values-v14/styles.xml , 391
Android手机通讯录下载/MyContacts/src/huahua/mycontacts/AlphabetScrollBar.java , 3739
Android手机通讯录下载/MyContacts/src/huahua/mycontacts/MainActivity.java , 9156
Android手机通讯录下载/MyContacts/src/huahua/mycontacts/PinyinUtils.java , 2729
没有账号? 忘记密码?

社交账号快速登录