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

获取手机中系统应用中联系人的信息的步骤。
我们将获取的联系人的信息用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"/>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值