博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android6.0拨打电话时的权限问题
阅读量:6349 次
发布时间:2019-06-22

本文共 3368 字,大约阅读时间需要 11 分钟。

hot3.png

首先在AndroidMenifest文件里加上这个权限: <uses-permission android:name="android.permission.CALL_PHONE" />

1.如果是直接跳转到拨号盘,是不存在权限管制的问题的. 2.如果是直接拨打电话,会存在权限动态获取的问题. 解决的代码如下:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {                    //没有权限,申请授权                    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {                        //如果app之前请求过该权限,被用户拒绝, 这个方法就会返回true.                        // 如果用户之前拒绝权限的时候勾选了对话框中”Don’t ask again”的选项,那么这个方法会返回false.                        // 如果设备策略禁止应用拥有这条权限, 这个方法也返回false.                        // 弹窗需要解释为何需要该权限,再次请求授权                        Util.showToast(MyRevationDetailActivity.this, getResources().getString(R.string.call_phone_authority_tv));                        //跳转到该应用的设置界面,让用户手动授权                        Intent intentSet = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);                        Uri uri = Uri.fromParts("package", getPackageName(), null);                        intentSet.setData(uri);                        startActivity(intentSet);                    } else {                        //直接请求授权                        /*                        在Fragment中申请权限,不要使用ActivityCompat.requestPermissions,                        直接使用Fragment的requestPermissions方法,否则会回调到Activity的onRequestPermissionsResult                         */                        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, Util.HTTP_CALL_PHONE_REQUEST);                    }                    // TODO: Consider calling                    //    ActivityCompat#requestPermissions                    // here to request the missing permissions, and then overriding                    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,                    //                                          int[] grantResults)                    // to handle the case where the user grants the permission. See the documentation                    // for ActivityCompat#requestPermissions for more details.                    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, Util.HTTP_CALL_PHONE_REQUEST);                } else {                    //在这里直接拨打电话                    Intent intent = new Intent(Intent.ACTION_CALL);                    Uri data = Uri.parse("tel:" + "电话号码");                    intent.setData(data);                    startActivity(intent);                }
@Override	public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {		super.onRequestPermissionsResult(requestCode, permissions, grantResults);                //requestCode 是一个标识,		if (requestCode == Util.MY_PERMISSIONS_REQUEST_CALL_PHONE) {			if (grantResults[0] == PackageManager.PERMISSION_GRANTED)			{                                 //获取到权限之后,进行下一步操作				startTakePhoto();			} else {				//跳转到该应用的设置界面,让用户手动授权				Intent intentSet = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);				Uri uri = Uri.fromParts("package", getPackageName(), null);				intentSet.setData(uri);				startActivity(intentSet);				Util.showToast(PhotoSelectorActivity.this, getResources().getString(R.string.allow_take_photo));			}		}	}

转载于:https://my.oschina.net/u/2438447/blog/882819

你可能感兴趣的文章
C++ Primer 有感(标准库map类型)
查看>>
(23)Spring Boot启动加载数据CommandLineRunner【从零开始学Spring Boot】
查看>>
Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框
查看>>
链表的反转
查看>>
动态从数据库获取数据(Vue.js)【数据可变】
查看>>
操作linux命令
查看>>
转载]typedef struct和struct的区别
查看>>
数据仓库、数据整合、ETL、ELT和EII之间的区别?
查看>>
c++ 注册表操作dll动态调用
查看>>
C#开发人员应该知道的13件事情
查看>>
工厂模式(Factory)
查看>>
Linux 虚拟地址与物理地址的映射关系分析【转】
查看>>
GNU make manual 翻译(三十七)
查看>>
自动化测试框架的搭建
查看>>
Linux 邮件服务器 之跟我一步一步来实现一个邮件系统【转】
查看>>
SpringAop
查看>>
[RHEL5企业级Linux服务攻略]--第4季 DNS服务全攻略
查看>>
jetty简单学习
查看>>
Centos 6.5使用yum安装mysql
查看>>
Activiti-5.9工作流引擎-数据库表结构
查看>>