
Intent.ACTION_CALL是Intent指定的直接拨号的action,必须声明权限,否则程序将崩溃
CALL_PHONE是拨打电话功能必须声明的权限,因为涉及用户手机的资费问题,属于Android的一项危险权限。在Android6.0以及更高版本上,在使用危险权限时都必须进行运行时权限处理。所以,首先使用ContextCompat.checkSelfPermission()检测是否已经授权,checkSelfPermission()方法接收两个参数,第一个参数为上下文Context,第二个参数为具体的权限名,返回值和PackageManager.PERMISSION_GRANTED做比较,相等则表示已授权。如果不相等,使用ActivityCompat.requestPermissions()方法来向用户申请授权,requestPermissions()方法接收三个参数,第一个参数为Activity的实例,第二个为String数组,把需要申请的权限名放入数组即可,第三个为请求码,只需要保证其唯一性即可。
调用完requestPermissions()方法后,无论是否同意,都会回调到onRequestPermissionsResult()方法中,授权结果封装在grantResults参数中,requestCode表示唯一的请求码
接听来电
拒接来电:
其中文中的接听电话android6-android7的处理方案是利用了监听通知使用权,所以还要新建一个NotificationListenerService的子类,叫ListenerService,需要在AndroidManifests中配置
另外需要提示用户打开通知使用权才可以正常使用
已测试通过了android6-android9各种机型,注意拒接来电在android9以上才有官方支持,所以需要设置compileSdkVersion=28。
需要的权限为:Manifest.permission.CALL_PHONE,Manifest.permission.READ_PHONE_STATE
8.0以上需要Manifest.permission.ANSWER_PHONE_CALLS,Manifest.permission.READ_CALL_LOG。
还不行的请注意三点:
1:检查权限是否都申请及在manifests里注册了
2:compileSdkVersion是否为28
3:android6到android7的手机的接听来电要依赖通知使用权,所以通知使用权打开才可以正常工作。
上一篇我们已经制作出了一个APP了,但是我们再深入一点点学一下,做一个APP能调用手机打电话的功能。
有语法报错,Alt + Enter,引入这个Intent类和Uri。
import android.content.Intent
import android.net.Uri
知识点:
1)、import 关键字
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 "import" 语句可完成此功能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,
其语法格式为:import package1[.package2…].(classname|*)
与package对应。比如C#里namespace与using对应。
2)、Intent 启动应用程序内部activity,还可以启动其他应用程序activity,以及发送广播动作。eg:
拨打电话、打开Android系统通话记录页面、拨号界面、发送email、选择相同类型的应用、自定义action等。这里就用到了打电话功能。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)