您查询的关键词是:读取 通讯录 源码 
下面是原始网址 https://www.haolizi.net/example/view_24658.html 在 2021-01-15 05:28:32 的快照。

360搜索与该网页作者无关,不对其内容负责。

读取手机通讯录(联系人)android源代码 - 开发实例、源码下载 - 好例子网
在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发读取手机通讯录(联系人)android源代码

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

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:1.99M
  • 下载次数:38
  • 浏览次数:2160
  • 发布时间:2019-06-19
  • 实例类别:Android平台开发
  • 发 布 人:crazycode
  • 所需积分:2
 相关标签: Android 通讯 通讯录 源代码

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

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;
}
}
}

网友评论

第 1 楼 万雪 发表于: 2019-12-27 16:56 46
太不好用了,打开直接没反应

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警