美文网首页
访问手机通讯录-权限运行时

访问手机通讯录-权限运行时

作者: 厦门_小灰灰 | 来源:发表于2017-10-27 15:32 被阅读262次

    1.在AndroidManifest.xml设置访问通讯的权限:

    //添加访问通讯录的权限
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
    

    2.模拟获取通讯录的名称与电话号码,然后用ListView进行显示,现在xml文件中添加ListView,

        <ListView
            android:id="@+id/contact_listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            ></ListView>
    

    3.在Activity中,配置ListView(其中代码不是全部,只贴核心代码)

        private ListView listView;
        private ArrayAdapter<String> adapter;  //适配器
        List<String> contactList = new ArrayList<String>();  //通讯获取的数据
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            listView = (ListView)findViewById(R.id.contact_listview);
            adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactList);
            listView.setAdapter(adapter);
    
            /*获取通讯录数据
            * 1.先判断是否已经有读取通讯录的权限
            * 2.如果没有的话,询问用户,如果有的话,直接读取通讯录的数据*/
    
            //1
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED ) {
                //未获得权限,询问用户
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1);
            } else {
                //已经权限
                readContacts();
            }
        }
    
    //读取通讯录数据
        public void readContacts() {
            Cursor contactCursor = null;
            try {
                contactCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
                if ( contactCursor != null ) {
                    while (contactCursor.moveToNext()) {
                        //读取通讯录数据
                        String name = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        String phoneNumber = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        contactList.add(name + "\n" + phoneNumber);
                    }
                    adapter.notifyDataSetChanged();  //刷新ListView
                }
            }catch ( SecurityException e) {
                e.printStackTrace();
            }
        }
    
    //权限选择结果回调
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            switch (requestCode) {
                case 1:
                {
                    if ( grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED ) {
                        readContacts();
                    } else {
                        Toast.makeText(this, "你不能读取用户通讯录", Toast.LENGTH_SHORT).show();
                    }
                }
                    break;
    
                default:
                    break;
            }
        }
    

    OK!

    相关文章

      网友评论

          本文标题:访问手机通讯录-权限运行时

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