获取手机中系统应用中联系人的信息的步骤。
我们将获取的联系人的信息用textview展示出来。
1.新建一个module,其中xml布局如下。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="com.zdsoft.testcontentresolver.MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent" android:layout_height="match_parent"
/>
</LinearLayout>
2.编写MainActivity.java文件
思路是:首先获得contentresolver操作对象和系统通讯录的uri,然后将系统通讯录的uri传入到contentresolver操作对象的query方法中(其实按道理的话也可以增删改)得到Cursor 对象,然后遍历出Cursor 将值取出来。
/**
* 获取手机中所有联系人的信息
*/
public class MainActivity extends Activity {
//首先声明内容接收者变量和要展示信息的控件
ContentResolver cr ;
TextView tv ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化方法
init();
}
//查询联系人方法具体初始化
private void init() {
//1.初始化内容接收者变量
cr = getContentResolver();
tv = (TextView) findViewById(R.id.tv);
//获得访问联系人的uri
Uri uri = ContactsContract.Contacts.CONTENT_URI;
//查询所有联系人cr的query有很多参数,因为是查询所有,所以没有查询条件限制
Cursor c = cr.query(uri,null,null,null,null);
//获取到要处理数据,用while遍历游标获取出
while(c.moveToNext()){
//获得cursor中列的总数
int count = c.getColumnCount();
for(int i = 0 ; i < count ; i++)
{//打印出列名及其对应的数据
tv.append(c.getColumnName(i)+"-->"+c.getString(i));
}
}
// 释放资源
c.close();
}
//查询具体人员的手机和电话
System.out.println("==========================");
//查询具体人员的手机和电话
//查出通讯录中Lucy的姓名及电话号码
//获得查询电话号码的URI
uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
tv = (TextView) findViewById(R.id.tv);
/** 利用cr的query方法时候,参数的具体情况如下。
* 第一个参数:uri
* 第二个参数:要查询的列的名字组成的数组
* 第三个参数:查询条件
* 第四个参数:查询条件的参数所组成的数组
* 第五个参数:排序条件
*/
//因为第二个参数需要查询的列的名字组成的数组,所以要获取到系统的这两列的列名。
//获取姓名的那一列的列名
String display_name = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
//获取电话号码那一列的列名
String number = ContactsContract.CommonDataKinds.Phone.NUMBER;
//利用cr开始query获得Cursor
c = cr.query(uri,new String[]{display_name,number},display_name+"=?",new String[]{"Lucy"},null);
//处理数据,遍历游标
while(c.moveToNext()){
//获得cursor中列的总数
int count = c.getColumnCount();
for(int i = 0 ; i < count ; i++){
//打印出列名及其对应的数据
tv.append(c.getColumnName(i)+"-->"+c.getString(i));
}
}
//释放资源
c.close();
}
以上是MainActivity.java代码部分。
3.接下来要很重要的是要在权限列表中去注册权限
android:name="android.permission.READ_CONTACTS"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zdsoft.testcontentresolver">
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
这个权限很容易遗忘。切记!