【Andorid Studio】开发小记——权限Permission

xiaoxiao2021-02-28  8

      关于Android的权限,目前已经有不少权限是直接开放的,也就是不需要弹出窗口让用户点击同意与否,系统直接给你权限,一些关键的权限还是需要的,例如通话、访问内存和定位信息(网络访问权限居然也系统默认给了,流量太伤·····),关于权限的申请,首先的,当然是在AndroidManifest.xml中进行注册,例如申请位置信息:

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

      假如在这里申请的权限是系统默认给的,那这么写也就足够了,但假如这里的权限还需要用户准许,那我们就还得在代码中申请。申请的关键代码是ActivityCompat.requestPermissions(Activity activity,String[] permissions,Int requestCode),其中的参数,activity当然就是当前的Activity了,permissions是一个String的数组,里面放的是需要申请的所有权限字段,最后一个requestCode就是一个id了,自己给定即可,后面会用到。

      首先是关于参数permissions,因为输入的参数一定得是一个String[],所以假如你需要申请的是一个权限,那可以直接String[] permissions=new String[1],然后直接给定值,权限的值都在Manifest.permission下,比如定位的权限那就是Manifest.permission.ACCESS_FINE_LOCATION,所以也就是:

String[] permissions=new String[1]{Manifest.permission.ACCESS_FINE_LOCATION};

      但是我们都会遇到一种情况,软件需要申请三个权限,现在客户已经同意两项了,有一项不同意,但软件一定需要三项都同意才可运行,这时候客户重新启动,如果还让客户点击三项权限,是不是太麻烦了呢?这里就要介绍到一种常用的方法来申请权限,首先要介绍一个是ContextCompat.checkSelfPermission(Context context,String permission),这是一个用于检查某个权限是否已经被允许的方法,返回值有PackageManager.PERMISSION_GRANTED(同意)和PackageManager.DENIED(不同意),可以先用这个方法来判断是否已经被允许了再选择要不要添加到permissions里面,但是String[]是在new的时候就必须声明维数的,更为方便的做法是先创个List<String> permissionsList来存储没有被同意的权限申请字段,然后再:

String[] permissions=permissionsList.toArray(new String[permissionsList.size()]);

进行转换即可。

      现在申请的是写好了,那用户同意或者不同意各项权限之后,我们都得做相应的处理吧?写在哪?Android已经写好了回调函数给了,在Activity中重写方法:

public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults)

这个方法中的具体代码就是在用户点击完权限是否允许界面后走的,看到了吗,这里的输入参数有一个int的requestCode,没错,这个就是我们前面调用ActivityCompat.requestPermissions()的时候传入的参数之一,根据自己设置的id,在这里进行switch(requestCode)然后case自己的id即可进行对应申请结束后的操作,permissions还是我们传入的需要申请的所有字段,而grantResults呢?它里面的参数一一对应permissions里每个权限字段的申请结果,结果是1(PackageManager.PERMISSION_GRANTED)或者-1(PackageManager.PERMISSION_DENIED)。

知道了以上的这些,应该就能自己写完权限申请的一些基本操作了吧~

转载请注明原文地址: https://www.6miu.com/read-1900392.html

最新回复(0)