美文网首页
ContentResolver读取联系人示例

ContentResolver读取联系人示例

作者: 沉默的小象 | 来源:发表于2023-07-02 00:04 被阅读0次
  • 确保设备上有联系人,并且不要使用模拟器,模拟器存在不显示权限弹窗的bug。
  • 在AndroidManifest.xml中添加权限:
   <uses-permission android:name="android.permission.READ_CONTACTS" />
  • MainActivity 代码:
package com.exp.cpdemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;

import java.security.Permission;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
            //读取联系人
            readNameAndNums();
        } else {
            //申请权限
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_CONTACTS}, 100);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 100) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //读取联系人
                readNameAndNums();
            } else {
                Log.w(TAG, "onRequestPermissionsResult: 权限申请失败");
            }
        }
    }

    private void readNameAndNums() {
        String[] selectKey = {
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER
        };
        Cursor cursor = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                selectKey,
                null,
                null,
                null
        );

        if (cursor != null && cursor.getCount() > 0) {
            int indexName = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            int indexNum = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);

            cursor.moveToFirst();
            do {
                Log.i(TAG, "readNameAndNums: name: "+ cursor.getString(indexName)+" numbers:"+cursor.getString(indexNum));
            } while (cursor.moveToNext());
        }

    }
}
  • 运行结果日志:


    1ea331849dbc444c878aa57aa64a4688.png

相关文章

网友评论

      本文标题:ContentResolver读取联系人示例

      本文链接:https://www.haomeiwen.com/subject/xmaxudtx.html