动态权限及利用ContentResolver读取系统的可共享数据

来源:互联网 发布:java set和get意义 编辑:程序博客网 时间:2024/05/16 08:40

动态权限对照的参考如下;开启组中其中一个权限的授权则组内其他授权也会被打开;

//需要在6.0后做动态权限的权限组,其中开启某一权限组中一个则默认开启组中其他权限;;;    <!-- CALENDAR-->    <uses-permission android:name="android.permission.READ_CALENDAR"/>    <uses-permission android:name="android.permission.WRITE_CALENDAR"/>    <!-- CAMERA-->    <uses-permission android:name="android.permission.CAMERA"/>    <!-- CONTACTS-->    <uses-permission android:name="android.permission.READ_CONTACTS"/>    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>    <!-- LOCATION-->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>    <!-- PHONE-->    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-permission android:name="android.permission.CALL_PHONE"/>    <uses-permission android:name="android.permission.READ_CALL_LOG"/>    <uses-permission android:name="android.permission.WRITE_CALL_LOG"/>    <uses-permission android:name="android.permission.USE_SIP"/>    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>    <!-- SENSORS-->    <uses-permission android:name="android.permission.BODY_SENSORS"/>    <!-- SMS-->    <uses-permission android:name="android.permission.READ_SMS"/>    <uses-permission android:name="android.permission.SEND_SMS"/>    <uses-permission android:name="android.permission.RECEIVE_SMS"/>    <uses-permission android:name="android.permission.RECEIVE_MMS"/>    <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>    <!-- STORAGE-->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

1: 如果在程序的所需权限中有包含如下的权限,则需要使用动态权限来处理,以免会出现异常的情况;

下面的例子:

//相等则已经授权,不相等则没有授权,需要请授权; if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS ) != PackageManager.PERMISSION_GRANTED) {                    //请求授权                    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);                }else{                    //接着做自己的事情                    getContacts();                }

2: 授权申请的时候会产生一个回调函数,如下:

@Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        switch (requestCode){            case 1:                if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {        //接着做自己的事情                    getContacts();                }else {                    Toast.makeText(ConProActivity.this, "权限被拒!", Toast.LENGTH_SHORT).show();                }            break;        }    }

下面是利用ContentResolver来获取系统的共享数据资源,电话号,短息,图片等等;

private void getContacts() {        ContentResolver contentResolver = getContentResolver();        Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);        if(cursor!=null) {            while (cursor.moveToNext()){                int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);                int numIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);                String name = cursor.getString(nameIndex);                String num = cursor.getString(numIndex);                Toast.makeText(ConProActivity.this, name+", "+num, Toast.LENGTH_SHORT).show();            }            cursor.close();        }    }
0 0