之前是自定义内容提供者,内容访问者,存在很多弊端。
然而大多数都是调用系统的,别人已经存在,直接调用即可。
首先在清单文件中配置:
<!--读取联系人的权限-->
<uses-permission android:name="android.permission.READ_CONTACTS" />
拿到系统联系人,用listview遍历
public class ListActivity extends AppCompatActivity {
private ListView list_tel_item;
private ContentResolver cr;
List<String> listName=new ArrayList<>();
List<String> listNumber=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
list_tel_item = (ListView) findViewById(R.id.list_tel_item);
cr = getContentResolver();
//获取联系人的ID及名字
Uri uri= Uri.parse("content://com.android.contacts/raw_contacts");
Cursor cursor=cr.query(uri,null,null,null,null);
while(cursor.moveToNext()){
int id=cursor.getInt(cursor.getColumnIndex("_id"));
String name=cursor.getString(cursor.getColumnIndex("display_name"));
Log.i("test",id+" "+name);
listName.add(name);
//根据联系人的ID获取联系人相对应的数据(名字+邮箱+phone)
Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");
Cursor cursorData=cr.query(uriData,null,null,null,null);
while(cursorData.moveToNext()){
String data1=cursorData.getString(cursorData.getColumnIndex("data1"));
//int type=cursorData.getInt(cursorData.getColumnIndex("mimetype_id"));
String type=cursorData.getString(cursorData.getColumnIndex("mimetype"));
if("vnd.android.cursor.item/phone_v2".equals(type)){
listNumber.add(data1);
Log.i("test"," "+data1+" "+type);
}
}
}
list_tel_item.setAdapter(new ListViewAdapter());
}
//给listview设置适配器
class ListViewAdapter extends BaseAdapter {
@Override
public int getCount() {
return listName.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = getLayoutInflater().inflate(R.layout.activity_textview, null);
//拿控件
TextView list_text_name = (TextView) view.findViewById(R.id.list_text_name);
TextView list_text_number = (TextView) view.findViewById(R.id.list_text_number);
//绑定数值
list_text_name.setText(listName.get(position));
list_text_number.setText(listNumber.get(position));
return view;
}
}
}
效果图如下所示: