在AndroidManifest.xml文件里声明权限,声明的目的是在用户安装该软件时可以得知该软件所需的权限,好让用户有知情权和选择权,对于普通权限这就够了,但是对于危险权限是不够的,只能起到向声明的作用,还是用不了权限对应的功能,对于危险权限,需要在使用到对应功能时,动态地向用户申请权限。
动态申请权限:申请前可以先查看一下用户给了该申请者权限没,如果给了就可以省去申请的麻烦了,检查是否被授权的方法是让申请者(上下文)兼容查看器去查看一下,ContextCompat.checkSelfPermission(申请者,申请的权限),该方法返回是否拥有权限的结果,用该结果与PackageManager.PERMISSION_GRANTED对比,PackegeManager是程序的管理者,PERMISSION_GRANTED代表被授权的值,如果相等就表示被授权过了,可以使用该权限对应的功能,如果没有就需要申请;对于活动的申请方式是,用活动兼容器ActivityCompat.requestPermission(申请者,申请的权限(字符串数组),申请标识码)申请权限,这个方法就会弹出一个对话框给用户看,让用户选择是否授予权限,选择结果会返回到一个onRequestPermissionResult(申请标识码,申请的权限(字符串数组),申请的返回结果grantResults)的方法里,在这个方法里去处理被授权和不被授权后的操作,具体的过程是先判断申请标识码,以知道是哪一个申请,然后申请是否被同意的结果都会被放到grantResults的数组里,先判断里面是否有结果了,也就是数组长度是否大于0,大于0代表申请结果出来了,否则就是申请结果还没有出来,如果大于0,就把grantResults[n]与PackageManager.PERMISSION_GRANTED对比,如果相等就代表被授权了,就可以执行对应的功能,否则就可以提示用户授权没有通过。
危险权限: