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

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

作者: 厦门_小灰灰 | 来源:发表于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!

相关文章

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

    1.在AndroidManifest.xml设置访问通讯的权限: 2.模拟获取通讯录的名称与电话号码,然后用Lis...

  • iOS 手机权限设置

    手机权限设置 在app中需要访问手机相册,相机,定位,通讯录等隐私数据的时候,如果不做权限设置app会crash。...

  • iOS权限配置

    访问相应的功能时,要在plist配置相应的权限 摄像头(相机)权限 相册权限 蓝牙权限 日历权限 访问通讯录 访问...

  • iOS 一些权限开启字段

    访问相机权限 2.访问相册权限 保存图片到相册的权限 地理位置权限 访问通讯录权限 6.麦克风权限

  • Android通讯录(6.0)操作简介

    添加权限 Android6.0获取手机通讯录动态权限 获取权限回调 读取手机联系人通讯录 共享数据监听 注册监听通...

  • Android6

    运行时权限 添加okhttp网络访问库 collapsingtoolbarlayout,snack,textlnp...

  • Android 6.0变更一览

    Android 6.0 API 运行时权限 运行时申请权限,需要targetSDK>=23,并且手机的系统大于6....

  • 访问手机权限

    修改plist升到iOS10之后,需要设置权限的有: 麦克风权限:Privacy - Microphone Usa...

  • 零基础学鸿蒙编程-运行时权限

    什么是运行时权限 为了更好的保护用户隐私及安全,鸿蒙引入运行时动态权限检查机制.应用需要访问一些涉及用户隐私及安全...

  • Android 8.0权限管理源码分析

    权限的目的是保护用户的隐私。应用访问敏感数据,例如通讯录和SMS,还有系统特性,如摄像头,都需要申请权限;根据权限...

网友评论

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

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