Android自动化测试中使用ADB监听电话并自动接听!_adb监听事件

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

mDataActivationState= 0
    mUserMobileDataState= false


上面是 `adb shell dumpsys telephony.registry` 输出的一部分,提供了关于手机通话状态的信息。以下是这些信息的解释:



Phone Id=0: 表示手机上的电话 ID。通常,手机上可以有多个电话,每个电话都有一个唯一的 ID。在此示例中,ID 为 0,表示手机上的第一个电话。

mCallState=1: 表示来电状态。在这里,1 表示电话的状态是 CALL_STATE_RINGING,即正在响铃,表示当前有来电。

mRingingCallState=5: 表示正在响铃的来电状态。在这里,5 表示来电状态是 CALL_STATE_ALERTING,表示来电正在呼叫。

mForegroundCallState=0: 表示前台通话的状态。在这里,0 表示前台没有活动通话。

mBackgroundCallState=0: 表示后台通话的状态。在这里,0 表示后台没有活动通话。

mPreciseCallState=Ringing call state: 5, Foreground call state: 0, Background call state: 0, Disconnect cause: -1, Precise disconnect cause: -1: 提供了更详细的通话状态信息,包括来电状态、前台通话状态、后台通话状态以及断开原因等。

mCallDisconnectCause=-1: 表示通话断开原因,-1 表示未提供断开原因的信息。

mCallIncomingNumber=17000724942: 表示来电的号码。在这里,来电号码是 17000724942。



> 
> 根据上述信息,手机正在响铃,当前有来电,来电状态为 CALL\_STATE\_ALERTING,来电号码是 17000724942。这是 telephony.registry 输出的一部分,用于提供电话状态和通话信息。
> 
> 
> 


下面是一个Python示例,用于获取来电状态:



import subprocess

def get_call_state():
    try:
        output = subprocess.check_output([“adb”, “shell”, “dumpsys”, “telephony.registry”], universal_newlines=True)
        lines = output.splitlines()
        
        for line in lines:
            if “mCallState” in line:
                call_state = line.split(“=”)[1].strip()
                return int(call_state)

except subprocess.CalledProcessError as e:
        print(f"Error executing adb command: {e}")
    
    return None



现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036


![](https://img-blog.csdnimg.cn/56a03f7c838544e2944a1b28ae9ad720.png)


### 3. 自动接听来电


一旦你获取到了来电状态,你可以根据需要执行接听电话的操作。通常,来电状态为1表示来电正在响铃,此时我们可以模拟按下接听电话的按钮,使用以下代码:



def answer_call():
    subprocess.call(‘adb shell input keyevent 5’, shell=True)


1. 建立自动化测试 在自动化测试中,你可以集成上述功能,以便在需要时自动接听来电。例如,你可以在特定测试用例中添加接听来电的逻辑,以确保应用程序在接听电话的情况下正常工作。


以下是一个示例,演示如何在自动化测试中使用ADB来监听来电和自动接听:



if name == “main”:
    call_state = get_call_state()
    if call_state is not None:
        print(f"来电状态: {call_state}")
        if call_state == 1:  # 当来电状态为 CALL_STATE_RINGING 时
            print(“接听电话中…”)
            answer_call()
    else:
        print(“无法获取来电状态”)


### 完整代码



> 
> 创建一个循环来定期检查来电状态,并在检测到来电时执行相关操作。以下是一个示例,用于不断检测来电状态:
> 
> 
> 



import subprocess
import time

def get_call_state():
    try:
        output = subprocess.check_output([“adb”, “shell”, “dumpsys”, “telephony.registry”], universal_newlines=True)
        lines = output.splitlines()
        
        for line in lines:
            if “mCallState” in line:
                call_state = line.split(“=”)[1].strip()
                return int(call_state)

except subprocess.CalledProcessError as e:
        print(f"Error executing adb command: {e}")
    
    return None

def answer_call():
    subprocess.call(‘adb shell input keyevent 5’, shell=True)

if name == “main”:
    while True:
        call_state = get_call_state()
        if call_state is not None:
            print(f"来电状态: {call_state}")
            if call_state == 1:  # 当来电状态为 CALL_STATE_RINGING 时
                print(“接听电话中…”)
                answer_call()
        else:
            print(“无法获取来电状态”)
        
        # 休眠一段时间后再次检测
        time.sleep(5)  # 5秒,你可以根据需要调整休眠时间


### 5. 注意事项


设备和制造商差异:不同的Android设备和制造商可能会有不同的实现方式,因此需要根据具体情况进行适配。



![img](https://img-blog.csdnimg.cn/img_convert/0b8dc8bf7455fccbb591bcac646af104.png)
![img](https://img-blog.csdnimg.cn/img_convert/1468bcb8b9df025a2b99473ef3abf165.png)
![img](https://img-blog.csdnimg.cn/img_convert/e4adedb224bef13c6fce2c0238c4d846.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值