Android权限总结

本文总结了Android 6.0(API 23)后引入的权限管理变化,主要关注普通权限和敏感权限的区别。针对敏感权限,如`READ_PHONE_STATE`,需要在代码中动态获取,并通过对话框请求用户授权。用户可以决定是否授予,并且一旦授权权限组内的一个子权限,其他子权限也会自动获得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近使用android6.0开发项目,碰到权限问题,android6.0(api23)以后google为了用户安全,对权限机制做了改变,我觉得有必要总结下, android的权限分两种,一种是普通权限(Normal Permissions),一种是敏感权限(Dangerous Permissions),

1.普通权限如下:

 <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
< uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
    <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.NFC"/>
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
    <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.REORDER_TASKS"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.SET_TIME_ZONE"/>
    <uses-permission android:name="android.permission.SET_WALLPAPER"/>
    <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>
    <uses-permission android:name="android.permission.TRANSMIT_IR"/>
    <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>


2.敏感权限如下(以下列出了权限组和对应子权限):
 <!-- 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_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- MICROPHONE 麦克风组 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- 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.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
    <uses-permission android:name="android.permission.RECEIVE_MMS" />
    <!-- STORAGE 存储组 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

   android 6.0之前,需要使用到相关权限只要在AndroidManifest.xml 里面注册即可,但是6.0以上版本对于敏感权限需要动态获取,即对于6.0以上系统,把需要权限放在AndroidManifest.xml 已经没用了,需要在代码里面获取,好苦逼,如获取<uses-permission android:name="android.permission.READ_PHONE_STATE" />权限,代码如下:

private void checkPermission()
    {
        if (Build.VERSION.SDK_INT >= 23) {
            int checkCallPhonePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
            if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_PHONE_STATE},REQUEST_CODE_ASK_CALL_PHONE);
                return;
            }else{
               //do something
            }
        } else {
            //do something
        }
    }


上面代码会弹出一个dialog,供用户授权,用户可以选择允许,或者拒绝,然后会有callback:

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_CALL_PHONE:
                if(permissions == null || permissions.length <=0)
                    break;
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
		   //do something				
                } else {
                    //get permission fail
                    Toast.makeText(this, "CALL_PHONE Denied", Toast.LENGTH_SHORT)show();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }


在grantResults[0] == PackageManager.PERMISSION_GRANTED处为用户允许使用该权限,然后就可以做想做的事。

    只要用户授权了权限组里面的任意子权限,其他子权限也自动授权。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值