安卓获取系统联系人

第一步:如果你用的是模拟器,则先在通讯录添加两三个联系人,分别填入他们的姓名和名字。

第二步:创建一个新项目。修改activity_main.xml文件,添加了一个listview来展示待会读取到的通讯录数据。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6     <ListView
 7         android:id="@+id/contacts_view"
 8         android:layout_width="match_parent"
 9         android:layout_height="match_parent">
10 
11     </ListView>
12 </LinearLayout>

第三步,修改MainActivity.java文件

 1 package com.example.contactstest;
 2 
 3 public class MainActivity extends AppCompatActivity {
 4     ArrayAdapter<String> adapter;
 5     List<String> contactsList=new ArrayList<>();
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         //获取到listview并且设置适配器
11         ListView contactsView=(ListView)findViewById(R.id.contacts_view);
12         adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
13         contactsView.setAdapter(adapter);
14         //如果没有授权,就会弹出申请授权的弹窗供用户选择,不论结果如何,都会回调onRequestPermissionsResult()方法
15         if(ContextCompat.checkSelfPermission(this, Manifest.
16                 permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){
17             ActivityCompat.requestPermissions(this,new String[]{
18                     Manifest.permission.READ_CONTACTS},1);
19         }else{
20             readContacts();
21         }
22     }
23     //查询联系人数据
24     private void readContacts(){
25         Cursor cursor=null;
26         try{
27             //查询联系人数据
28             cursor=getContentResolver().query(ContactsContract.CommonDataKinds.
29                     Phone.CONTENT_URI,null,null,null,null);
30             if(cursor!=null){
31                 while(cursor.moveToNext()){
32                     //获取联系人姓名
33                     String displayName=cursor.getString(cursor.getColumnIndex
34                             (ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
35                     //获取联系人电话
36                     String number=cursor.getString(cursor.getColumnIndex
37                             (ContactsContract.CommonDataKinds.Phone.NUMBER));
38                     System.out.println(displayName+" "+number);
39                     contactsList.add(displayName+"
"+number);
40                 }
41                 //刷新
42                 adapter.notifyDataSetChanged();
43             }
44         }catch (Exception e){
45             e.printStackTrace();
46         }finally{
47             if(cursor!=null){
48                 cursor.close();
49             }
50         }
51     }
52     /**
53      * 当调用完requestPermissions()方法后,系统会弹出一个权限申请的对话框,用户可以选择拒绝或同意
54      * 我们的权限申请,无论哪种结果,都会调用onRequestPermissionsResult方法,结果封装在grantResults中
55      * @param requestCode 请求码
56      * @param permissions 申请的权限
57      * @param grantResults 用户运行申请的权限
58      */
59     @Override
60     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
61         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
62         switch (requestCode){
63             //System.out.println(grantResults[0]);
64             case 1:
65                 if(grantResults.length>0 & grantResults[0]==PackageManager.PERMISSION_GRANTED){
66                     readContacts();
67                 }else{
68                     Toast.makeText(this,"你拒绝申请权限的请求",Toast.LENGTH_SHORT).show();
69                 }
70                 break;
71             default:
72                 break;
73         }
74     }
75 }

最后一步,修改AndroidManifest.xml文件,添加权限 <uses-permission android:name="android.permission.READ_CONTACTS"/>

运行程序,结果:

 

原文地址:https://www.cnblogs.com/panqiaoyan/p/12937132.html