要使用系统的内置ContentProvider,首先得获取注册权限。
<uses-permission
android:name="android.permission.READ_CONTACTS">
</uses-permission>
给出权限注册源码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.syscp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<uses-permission
android:name="android.permission.READ_CONTACTS">
</uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.syscp.Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
然后,就是直接在主Activity的界面里面显示出来。
主Activity代码如下
package com.example.syscp;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Color;
import android.view.Menu;
import android.widget.TextView;
public class Main extends Activity {
// 查询ContentProvider时希望返回的列
String[] colimns = { Contacts.DISPLAY_NAME, Contacts._ID,
// People._ID,
// People.NAME
};
Uri contactUri = Contacts.CONTENT_URI;
// Uri contatUri=People.CONTENT_URI;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
String result = getQueryData();
tv.setTextColor(Color.GREEN);
tv.setTextSize(20.0f);
tv.setText("ID\t姓名\t\t电话号码\n" + result);
}
// 获取联系人列表信息
private String getQueryData() {
// TODO Auto-generated method stub
String result = "";
// 获取ContentResolver对象
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(contactUri, colimns, null, null, null);
// 获得ID、Name等字段的索引
int idIndex = cursor.getColumnIndex(Contacts._ID);
int nameIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
String phoneNum = "";
// 遍历cursor,提取数据
for (cursor.moveToFirst(); (!cursor.isAfterLast()); cursor.moveToNext()) {
result = result + cursor.getString(idIndex) + "\t";
result = result + cursor.getString(nameIndex) + "\t";
// 获取电话号码
Cursor phone = resolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
+ cursor.getString(idIndex), null, null);
while(phone.moveToNext()){
int phoneIndex=phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String temp = phone.getString(phoneIndex);
phoneNum="\t"+temp;
}
phone.close();
result+=phoneNum+"\t\n";
}
cursor.close();
return result;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}