2016-9-12

来源:互联网 发布:js 遍历数组 编辑:程序博客网 时间:2024/05/16 17:59

2016-9-12

1.android 6.0运行时权限

1.需要设置targetSdkVersion>=23时, 才会使用此功能, 如果设置targetSdkVersion<=22即使手机是6.0的系统也仍是采用旧的权限管理策略2.6.0中把权限分成两类:    一. 不涉及用户隐私的普通权限,需要的AndroidManifest.xml声明,使用的是旧的权限管理策略,如:网络 蓝牙等        参考地址:https://developer.android.com/guide/topics/security/normal-permissions.html            ACCESS_LOCATION_EXTRA_COMMANDS            ACCESS_NETWORK_STATE            ACCESS_NOTIFICATION_POLICY            ACCESS_WIFI_STATE            BLUETOOTH            BLUETOOTH_ADMIN            BROADCAST_STICKY            CHANGE_NETWORK_STATE            CHANGE_WIFI_MULTICAST_STATE            CHANGE_WIFI_STATE            DISABLE_KEYGUARD            EXPAND_STATUS_BAR            GET_PACKAGE_SIZE            INSTALL_SHORTCUT            INTERNET            KILL_BACKGROUND_PROCESSES            MODIFY_AUDIO_SETTINGS            NFC            READ_SYNC_SETTINGS            READ_SYNC_STATS            RECEIVE_BOOT_COMPLETED            REORDER_TASKS            REQUEST_IGNORE_BATTERY_OPTIMIZATIONS            REQUEST_INSTALL_PACKAGES            SET_ALARM            SET_TIME_ZONE            SET_WALLPAPER            SET_WALLPAPER_HINTS            TRANSMIT_IR            UNINSTALL_SHORTCUT            USE_FINGERPRINT            VIBRATE            WAKE_LOCK            WRITE_SYNC_SETTINGS    二. 涉及用户隐私的危险权限, 也需要在AndroidManifest.xml声明,并且需要开发者主动申请并在用户同意后才能使用该权限涉及到的功能, 如果开发者没有主动申请这类权限会导致app崩溃, 对于这类权限最好能在app启动时就申请一些必须的权限, 其他非必须的可以在使用时再申请,避免同时申请过多权限        参考地址:https://developer.android.com/guide/topics/security/permissions.html#perm-groups            CALENDAR(日历)                 READ_CALENDAR                WRITE_CALENDAR            CAMERA(相机)                 CAMERA            CONTACTS(联系人)                 READ_CONTACTS                WRITE_CONTACTS                GET_ACCOUNTS            LOCATION(位置)                 ACCESS_FINE_LOCATION                ACCESS_COARSE_LOCATION            MICROPHONE(麦克风)                 RECORD_AUDIO            PHONE(手机)                 READ_PHONE_STATE                CALL_PHONE                READ_CALL_LOG                WRITE_CALL_LOG                ADD_VOICEMAIL                USE_SIP                PROCESS_OUTGOING_CALLS            SENSORS(传感器)                 BODY_SENSORS            SMS(短信)                 SEND_SMS                RECEIVE_SMS                READ_SMS                RECEIVE_WAP_PUSH                RECEIVE_MMS            STORAGE(存储卡)                 READ_EXTERNAL_STORAGE                WRITE_EXTERNAL_STORAGE3.使用基本流程if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {// 没有权限。    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {            // 用户拒绝过这个权限了,应该提示用户,为什么需要这个权限。    } else {        // 申请授权。        ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, 100);    }}...@Overridepublic void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {    switch (requestCode) {        case 100: {            if (grantResults.length > 0                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                // 用户同意申请的权限            } else {                // 用户拒绝了申请的权限            }            return;        }    }}shouldShowRequestPermissionRationale():在用户第一次拒绝后, 再次对莫个权限调用此方法返回true;    在用户第二次拒绝并勾选不再提醒后,再次调用此方法会返回false;    在系统的权限管理中禁止应用的此权限会返回false.
0 0