ContentResolver内容接收者访问系统通讯录

来源:互联网 发布:三维软件开发公司 编辑:程序博客网 时间:2024/05/23 17:18

获取手机中系统应用中联系人的信息的步骤。
我们将获取的联系人的信息用textview展示出来。
1.新建一个module,其中xml布局如下。
activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns: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"><TextViewandroid: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的姓名及电话号码//获得查询电话号码的URIuri = 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获得Cursorc = 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"/>

这个权限很容易遗忘。切记!

0 0