Android6.0 动态获取拨打电话授权

来源:互联网 发布:域名后缀org含义 编辑:程序博客网 时间:2024/04/27 06:03

Android 6.0 以后需要拨打电话仅在AndroidManifest 声明权限不能拨出电话,需要在运行时获取授权才能获取权限,以下为解决方法:

在点击触发按钮后,获取判断用户是否授权,如果授权,则拨打电话,否则提示用户进行授权:
AndroiManifest.xml文件的权限声明必不可少

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

按钮点击事件触发后检查用户是否授予权限

@Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.call:                callToPhone();                break;        }
private void callToPhone() {        /**         *  借助ContextCompat.checkSelfPermission()方法判断是否授予权限,接收两个参数,Context和具体权限名,方法的返回值与         *  PackageManager.PERMISSION_GRANTED做比较,相等说明已经授权         */        if(ContextCompat.checkSelfPermission(Store.this,Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){            /**             * 同样借助ContextCompat.requestPermissions()方法弹出权限申请的对话框             * 参数为Context,具体权限名,作为返回结果的识别码(自定义)             */            ActivityCompat.requestPermissions(Store.this,new String[]{Manifest.permission.CALL_PHONE},1);        }else{            //已授权拨打电话            try{                Intent intent = new Intent(Intent.ACTION_CALL);                intent.setData(Uri.parse("tel:"+keyInfo.getShopPhone()));                startActivity(intent);            } catch (SecurityException e){                e.printStackTrace();            }        }    }

效果图:
这里写图片描述

最后实现回掉函数onRequestPermissionsResult()处理用户的操作结果

        /**         * @param requestCode 前面定义的反馈结果识别码         * @param permissions         * @param grantResults 授权结果         */        @Override        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {            switch (requestCode){                case 1:                    //授权重新调用callToPhone                    if (grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){                        callToPhone();                    } else {                        //不授权提示用户的操作                        Toast.makeText(this, "您拒绝授权", Toast.LENGTH_SHORT).show();                    }                    break;                default:            }        }

到此成功获取授权,其他权限获取授权方式与此类似