Android 使用前台服务 获取通话状态和来电号码

本文介绍了如何在Android应用中,通过创建前台服务并注册通话状态监听器,来实现在来电或通话时获取并处理来电号码的需求。在获取到权限后,启动前台服务并在服务中监听电话状态,展示对话框显示来电信息。
摘要由CSDN通过智能技术生成

产品提出一个需求:在来电或通话时获取来电号码(因为内部使用的是虚拟号,需要调接口查询对方的身份)并展示相关信息

先上个效果图
解决方案:在前台服务中注册通话状态的监听,在响铃和通话时可以获取到手机号码,做完相关的逻辑处理后,在前台服务中使用对话框显示
在这里插入图片描述
声明权限
监听手机的状态肯定是危险权限的 ,需要我们配置清单中声明后再运行中申请

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><!--前台服务权限-->

    <uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--手机通话状态权限-->
    <uses-permission android:name="android.permission.READ_CALL_LOG" /><!--获取来电号码权限-->

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><!--悬浮窗权限,6.0之前就有-->
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" /><!--悬浮窗权限,6.0之后额外添加-->

在activity中申请权限,申请权限使用的是郭霖大大的PermissionX

dependencies {
   
	...
    //PermissionX
    implementation 'com.guolindev.permissionx:permissionx:1.5.1'
}
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
   
            PermissionX.init(this)
                .permissions(Manifest.permission.READ_CALL_LOG,Manifest.permission.READ_CALL_LOG,Manifest.permission.SYSTEM_ALERT_WINDOW)
                .onExplainRequestReason {
    scope, deniedList ->
                    //先获取正常的权限,获取完后,走这里获取特殊权限(如悬浮窗等,必须要去系统页面手动设置)
                    val message = "需要您开启以下权限才能正常使用"
                    scope.showRequestReasonDialog(deniedList, message, "去开启", "拒绝")
                }
                .request {
    allGranted, _, deniedList ->
                    if (allGranted) {
   
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值