第一步:如果你用的是模拟器,则先在通讯录添加两三个联系人,分别填入他们的姓名和名字。
第二步:创建一个新项目。修改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"/>
运行程序,结果: