通过ContentResolver获取电话本数据
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
String string = "";
//得到ConTentResolver对象
ContentResolver cr = getContentResolver();
Cursor cs = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cs.moveToNext()) {
//取得联系人名字
int nameFieldColumnIndex = cs.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = cs.getString(nameFieldColumnIndex);
string += (contact + "\n");
}
cs.close();
tv.setText(string);
setContentView(tv);
}
}
需要权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
其中
ContentResolver cr = getContentResolver();
Android中程序间数据的共享是通过Provider/Resolver进行的。提供数据(内容)的就叫Provider,Resovler提供接口对这个内容进行解读,系统提供了联系人的Provider,那么我们就需要构建一个Resolver来读取联系人的内容。
Cursor cs = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
我将这句看成一个sql查询语句, 第一个参数是表名,第二个参数是返回的列(数组形式),第三个是查询条件(where后的),第四个参数是替换掉第三个参数中的占位符"?",第五个参数是排序,跟Order by一样,默认是升序的 。