Android系统权限

目录

  1. 声明权限:应用清单中声明需要的权限

  2. 运行时请求权限:应用运行时请求用户授予权限[Android 6.0(API 级别 23)]

  3. 权限最佳做法

6.0前所有权限添加和6.0后正常权限添加

  1. 添加方式

    • 正常权限不会直接给用户隐私权带来风险。如在其清单中列出了正常权限,系统将自动授予该权限

    • 危险权限会授予应用访问用户机密数据的权限。如在其清单中列出了正常权限,系统将自动授予该权限。如列出了危险权限,则用户必须明确批准您的应用使用这些权限(代码中动态添加权限)

  2. 危险权限和权限组(6.0),其他为正常权限

    1. CALENDAR

      • READ_CALENDAR
      • WRITE_CALENDAR
    2. CAMERA

      • CAMERA
    3. CONTACTS

      • READ_CONTACTS
      • WRITE_CONTACTS
      • GET_ACCOUNTS
    4. LOCATION

      • ACCESS_FINE_LOCATION
      • ACCESS_COARSE_LOCATION
    5. MICROPHONE

      • RECORD_AUDIO
    6. PHONE

      • READ_PHONE_STATE
      • CALL_PHONE
      • READ_CALL_LOG
      • WRITE_CALL_LOG
      • ADD_VOICEMAIL
      • USE_SIP
      • PROCESS_OUTGOING_CALLS
    7. SENSORS

      • BODY_SENSORS
    8. SMS

      • SEND_SMS
      • RECEIVE_SMS
      • READ_SMS
      • RECEIVE_WAP_PUSH
      • RECEIVE_MMS
    9. STORAGE

      • READ_EXTERNAL_STORAGE
      • WRITE_EXTERNAL_STORAGE
  3. 如需要添加短信权限,即在清单文件中声明 uses-permission 即可

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.snazzyapp">
    
        <uses-permission android:name="android.permission.SEND_SMS"/>
        
    
        <application ...>
            ...
        </application>
    
    </manifest>
    

运行时请求权限

  1. 大致流程

    1. 判断用户是否开启该权限

    2. 判断用户是否已经拒绝过该权限,若拒绝过,提示其开启

    3. 若第一次需要该权限,提示用户选择开启/拒绝该权限

    4. 在回调方法onRequestPermissionsResult中获取用户选择情况,并做对应处理

  2. 详细案例

    private void checkPermission() {
        // 1. 判断用户是否开启该权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
    
            // 2. 若用户已拒绝过该权限,返回true. 提示用户开启权限
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {
    
                Toast.makeText(this, "未获得权限哦,请到设置界面开启该权限吧...", Toast.LENGTH_SHORT).show();
    
            // 3. 第一次使用该权限时调用以请求适当的权限,用户选择结果在onRequestPermissionsResult方法中获取
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE);
            }
    
        } else {
            call();
        }
    }
    
    // 4. 获取用户接受/拒绝权限的情况
    @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_CALL_PHONE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    call();
                } else {
                    Toast.makeText(this, "您以选择拒绝开启打电话权限...", Toast.LENGTH_SHORT).show();
                }
                break;
    
            default:
                break;
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值