您的位置:首页 > 移动开发 > Android开发

android内容访问者+获取联系人信息

2017-02-22 12:33 344 查看
android 通过内容访问者获取所以联系人

下面是效果图 用listview展示比较丑,不过重点看功能:



这个是通过点击button来获取


获取联系人必须添加权限

<uses-permission android:name="android.permission.READ_CONTACTS" />


Uri.parse(“content://com.android.contacts/raw_contacts”);获取联系人类,拿到联系人的ID

通过ID在拿联系人的具体信息

Uri.parse(“content://com.android.contacts/raw_contacts/”+id+”/data”);

因为联系人的姓名、电话号码、邮箱、、、多在同一列所以要判断mimetype 的类型。

vnd.android.cursor.item/name 用户名

vnd.android.cursor.item/phone_v2 电话号码

public class MainActivity extends AppCompatActivity {

private ListView tv_main_testView;
private ContentResolver cr;
private List<Map<String,Object>> lm=new ArrayList<>();//

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取listView控件
tv_main_testView = (ListView) findViewById(R.id.tv_main_testView);
//获取内容访问者
cr = getContentResolver();
}

//获取联系人的方法
public void getUser(View view){
//用户表的uri
Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
//用户数据
Cursor c=cr.query(uri,null,null,null,null);
while(c.moveToNext()){
//用户ID
int id=c.getInt(c.getColumnIndex("_id"));
//用户名
String name=c.getString(c.getColumnIndex("display_name"));
Log.i("test",id+" "+c.getString(c.getColumnIndex("display_name")));
//根据用户ID些查看详细信息
Uri uridata=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");
//用户信息信息数据
Cursor cs=cr.query(uridata,null,null,null,null);

while(cs.moveToNext()){
//数据类型
String type=cs.getString(cs.getColumnIndex("mimetype"));
Log.i("test","电话号码:"+cs.getString(cs.getColumnIndex("data1")) +"    类型="+cs.getString(cs.getColumnIndex("mimetype")));
//用户数据map集合
Map<String,Object> map=new HashMap<>();
if(type.equals("vnd.android.cursor.item/name")){
//当type是vnd.android.cursor.item/name时 添加用户名
map.put("namedata",cs.getString(cs.getColumnIndex("data1")));
}else if(type.equals("vnd.android.cursor.item/phone_v2")){
//当type是vnd.android.cursor.item/phone_v2时 添加手机号码
map.put("phonedata",cs.getString(cs.getColumnIndex("data1")));
}

lm.add(map);
}
//设置适配器
SimpleAdapter simple=new SimpleAdapter(MainActivity.this,lm,R.layout.item_phone,new String[]{"namedata","phonedata"},new int[]{R.id.tv_item_phone_name,R.id.tv_item_phone_phone});
tv_main_testView.setAdapter(simple);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android listview