使用系统自带的ContentProvider查询联系人

本文介绍如何使用Android的ContentResolver和ContentProviderAPI,根据联系人的ID查询其电话号码,包括家庭电话和移动电话。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//MainActivity.java

package com.example.test_contentproviderdemo;

import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ContentResolver cr = getContentResolver();
        Cursor c = cr.query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null);
        if (c!=null) {
            while (c.moveToNext()) {
                int id = c.getInt(c.getColumnIndex("_id"));
                Log.i("info","_id"+id);
                Log.i("info","name"+c.getString(c.getColumnIndex("display_name")));
                Cursor c1 = cr.query(Phone.CONTENT_URI, new String[]{Phone.NUMBER,Phone.TYPE}, Phone.CONTACT_ID+"="+id, null,null);
                if (c1!=null) {
                    while (c1.moveToNext()) {
                        int type=c1.getInt(c1.getColumnIndex(Phone.TYPE));
                        if (type==Phone.TYPE_HOME) {
                            Log.i("info","家庭电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
                        }else{
                            Log.i("info","移动电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
                        }
                    }
                    c1.close();
                }
            }
            c.close();
        }
    }

}

//要在AndroidManifest文件中添加权限

 <uses-permission android:name="android.permission.READ_CONTACTS"/>

PS:
我们是根据联系人的id进行查询号码,不是根据名字进行查询,因为名字有可能相同,但是id是唯一的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值