Android中的权限管理

权限是一个安全机制,它可以保护用户隐私。当应用需要用到一些存在一定安全风险的系统特性时,会及时告知用户,让用户来做最后的选择。

权限询问出现的场景
(1)安装应用时
(2)6.0以上程序运行时

权限的使用方法
AndroidMainfest.xml

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

常用的权限
这里写图片描述

权限的使用方法——Android6.0运行时权限处理
普通权限
危险权限

这里写图片描述

前提:targetSDKVersion>=23并且手机系统>=6.0
1、在Androidmainfest.xml中声明需要申请的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2、在代码中加入申请权限的方法

checkSelfPermission//获取权限是否已被授权的状态
requestPermissions//出现弹出窗请求用户授权权限
shouldShowRequestPermissionRationale//是否需要需要为某个权限授权说明原因
onRequestPermissionsResult//授权结果回调
                    //获取权限是否被授权的状态
                    if (ContextCompat.checkSelfPermission(MainActivity.this,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED) {
                        if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                            // 说明需要申请该权限的理由
                            Toast.makeText(MainActivity.this, "我真的需要这个权限",
                                    Toast.LENGTH_SHORT).show();
                            // 再次申请需要的权限
                            ActivityCompat.requestPermissions(MainActivity.this,
                                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
                        } else {
                            //弹出框弹出是否授权
                            ActivityCompat.requestPermissions(MainActivity.this,
                                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
                        }
                    } else {
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                doWriteDisk();
                            }
                        }).start();
                    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE:
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 权限同意了
                    Toast.makeText(this, "权限同意了", Toast.LENGTH_SHORT).show();
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            doWriteDisk();
                        }
                    }).start();
                } else {
                    // 权限不同意
                    Toast.makeText(this, "权限不同意无法执行该操作", Toast.LENGTH_SHORT).show();
                }

                return;
        }
    }

这里写图片描述
注:手机系统<6.0 手机权限都是默认授予的,并且无法取消,手机系统>6.0手机权限可以取消。
targetSDKVersion<23 危险权限都是默认授予的。

自定义权限

应用B跳转应用A

应用A


    <permission android:name="com.netease.study.permission.start" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:permission="com.netease.study.permission.start">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

应用B

<uses-permission android:name="com.netease.study.permission.start"/>
                Intent intent = new Intent();
                intent.setClassName("com.netease.study.custompermission", "com.netease.study.custompermission.MainActivity");
                startActivity(intent);

自定义权限属性
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值