效果图:
package com.example.android25_contentprovide2test;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 读取联系人
* 内容提供者提供了对本地数据库访问的接口,由于联系人的信息由多个表存储
* 这里主要使用到了两个表(raw_contacts,data)。所以至少对数据库做两次查询。
* 并需要在清单文件里面配置读取联系人的权限
*/
public class MainActivity extends AppCompatActivity {
private ContentResolver cr;
private ListView main_lv;
private List<Map<String, Object>> data;
private SimpleAdapter simpleAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取内容访问者
cr = getContentResolver();
main_lv = (ListView) findViewById(R.id.main_lv);
data = new ArrayList<Map<String,Object>>();
simpleAdapter = new SimpleAdapter(this, data,android.R.layout.simple_list_item_2,new String[]{"names","phones"},new int[]{android.R.id.text1,android.R.id.text2});
main_lv.setAdapter(simpleAdapter);
}
public void getphone(View view){
//查询时先查联系人的ID,再通过联系人的ID查看联系人具体信息
Cursor cursor= cr.query(Uri.parse("content://com.android.contacts/raw_contacts"),null,null,null,null);
while(cursor.moveToNext()){
Map<String,Object> map=new HashMap<String,Object>();
int _id= cursor.getInt(cursor.getColumnIndex("_id"));
String dname= cursor.getString(cursor.getColumnIndex("display_name"));
map.put("names",dname);
//根据ID获取联系人信息
Cursor c=cr.query(Uri.parse("content://com.android.contacts/raw_contacts/"+_id+"/data"),null,null,null,null);
while(c.moveToNext()){
String type= c.getString(c.getColumnIndex("mimetype"));
String data= c.getString(c.getColumnIndex("data1"));
map.put("phones",data);
Log.i("test"," "+type+" "+data);
}
//给集合添加数据
data.add(map);
}
//通知适配器发生改变
simpleAdapter.notifyDataSetChanged();
}
}