• 安卓请求权限


    1.首先确定你要申请的权限

    可以定义成一个数组:如

    protected String[] needPermissions = {
                Manifest.permission.WRITE_EXTERNAL_STORAGE,//存储卡写入权限
                Manifest.permission.READ_EXTERNAL_STORAGE,//存储卡读取权限
                Manifest.permission.READ_PHONE_STATE,//读取手机状态权限
        };

    上诉权限是一个常量字符串,需要引入 import android.Manifest;

    2.检测权限有没有获取到,找出没获取到的去申请

    private List checkGamePer(){
            List arr = new ArrayList();
            for (String perm : needPermissions) {

                    //this参数要activity
                if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED ) {
                    arr.add(perm);
                }
            }
            return arr;
        }

     List arr = checkGamePer();
            if (arr.size()>0) {
                // 还有权限没申请到,则申请权限,  this参数要activity
                ActivityCompat.requestPermissions(this, arr.toArray(new String[arr.size()]), 1);
            } else {
               //权限都申请到了,直接做你想做的事
            }

    3.玩家点击同意或者拒绝权限后会回调,在上诉this的activity中注册回调函数

    1. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    2. if (requestCode == 1) {
    3. Boolean flag = true;
    4. for (int i = 0; i < permissions.length; i++) {
    5. if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//选择了“始终允许”
    6. flag = false;
    7. }
    8. }
    9. if (flag) {
    10. //申请成功
    11. } else {
    12. //失败 退出游戏
    13. finish();
    14. }
    15. }
    16. }

    这里的requestCode就是请求权限时,传入的参数 

    写法2

    1. //请求权限
    2. protected List mNeedRequestPMSList = new ArrayList<>();
    3. void checkAndRequestPermissions(int requestCode) {
    4. if(Build.VERSION.SDK_INT >= 23 &&
    5. PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(MainActivity.activity,Manifest.permission.READ_PHONE_STATE)){
    6. mNeedRequestPMSList.add(Manifest.permission.READ_PHONE_STATE);
    7. }
    8. checkAndRequestPermissionsEnd(Constants.REQUEST_PERMISSIONS_CODE_ViVo);
    9. }
    10. /**检测权限结束 */
    11. private void checkAndRequestPermissionsEnd(int requestCode){
    12. if (0 == mNeedRequestPMSList.size()) {
    13. /**
    14. * 权限都已经有了
    15. */
    16. permissionInit();
    17. } else {
    18. /**
    19. * 有权限需要申请,主动申请。
    20. */
    21. String[] temp = new String[mNeedRequestPMSList.size()];
    22. mNeedRequestPMSList.toArray(temp);
    23. ActivityCompat.requestPermissions(MainActivity.activity, temp, requestCode);
    24. }
    25. }
    26. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    27. //是否用户都点了允许
    28. Boolean flag = true;
    29. for (int i = 0; i < permissions.length; i++) {
    30. if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//选择了“始终允许”
    31. flag = false;
    32. }
    33. }
    34. switch (requestCode) {
    35. case Constants.REQUEST_PERMISSIONS_CODE_OPPO:
    36. if (flag) {
    37. ChannelMain.getInstance().agreePermission();
    38. } else {
    39. /**
    40. * 如果用户没有授权,那么应该说明意图,引导用户去设置里面授权。
    41. */
    42. Toast.makeText(this, "应用缺少SDK运行必须的READ_PHONE_STATE权限!请点击\"应用权限\",打开所需要的权限。", Toast.LENGTH_LONG).show();
    43. Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    44. intent.setData(Uri.parse("package:" + getPackageName()));
    45. startActivity(intent);
    46. finish();
    47. }
    48. break;
    49. default:
    50. break;
    51. }
    52. }

     

  • 相关阅读:
    java继承,接口,抽象类
    k8s 清理旧版本的镜像
    B. Jellyfish and Game-Codeforces Round 902 (Div. 2)
    【leetcode】【剑指offer Ⅱ】035. 最小时间差
    SpringBoot 实现 PDF 添加水印有哪些方案?
    [附源码]计算机毕业设计基于springboot的连锁药店销售管理系统
    智慧餐厅解决方案-最新全套文件
    IOS(刘海/留海/流海)屏幕判断
    5、MySql 全局锁、表锁、行锁
    vscode 提升小程序开发效率的必备插件与工具
  • 原文地址:https://blog.csdn.net/xzl159/article/details/126155938