如何使用 Python 控制 Android 设备的蓝牙和 WiFi

news/2024/11/8 6:45:13/

在本文中,我们将探讨如何利用 Python 脚本通过 ADB(Android Debug Bridge)来控制 Android 设备的蓝牙和 WiFi 状态。我们将提供一个通用的方法,使得切换服务的过程更加简洁和高效。

1. 环境准备

首先,确保你的计算机上已安装 ADB,并且能够通过 USB 调试连接到 Android 设备。你可以在命令行中运行以下命令以确认 ADB 是否工作正常:

adb devices

如果你看到连接的设备列表,则说明环境设置成功。

2. 脚本解析

下面是我们的完整 Python 脚本:

python">import subprocess
import time
import threadingdef check_service_state(service_name):"""检查服务状态并返回状态值"""try:if service_name == "bluetooth":result = subprocess.run(['adb', 'shell', 'settings', 'get', 'global', 'bluetooth_on'], capture_output=True, text=True)return result.stdout.strip()elif service_name == "wifi":result = subprocess.run(['adb', 'shell', 'settings', 'get', 'global', 'wifi_on'], capture_output=True, text=True)return result.stdout.strip()# 可以添加其他服务的状态检查...except Exception as e:print(f"发生错误: {e}")return Nonedef wait_and_check_service_state(service_name, success_value, duration, interval):"""在指定时间内间隔检测服务状态"""stop_time = time.time() + durationwhile time.time() < stop_time:current_state = check_service_state(service_name)if current_state == success_value:return Truetime.sleep(interval)return Falsedef toggle_service(service_name, enable_command, disable_command, success_value, enable_duration, disable_duration, max_timeout):"""通用方法,切换服务状态"""try:# 打开服务subprocess.run(['adb', 'shell', enable_command])print(f"正在打开{service_name}...")# 等待直到服务打开成功或超时start_time_enable = time.time()if wait_and_check_service_state(service_name, success_value, enable_duration, 0.5):actual_time_enable = time.time() - start_time_enableprint(f"{service_name.capitalize()}成功打开,实际时间: {actual_time_enable:.2f} 秒")else:print(f"{service_name.capitalize()}打开失败,超出{enable_duration}秒限制")# 检查是否超时if time.time() - start_time_enable >= max_timeout:print(f"{service_name.capitalize()}打开未成功,在{max_timeout}秒内未完成")return# 关闭服务subprocess.run(['adb', 'shell', disable_command])print(f"正在关闭{service_name}...")# 等待直到服务关闭成功或超时start_time_disable = time.time()if wait_and_check_service_state(service_name, "0", disable_duration, 0.5):actual_time_disable = time.time() - start_time_disableprint(f"{service_name.capitalize()}成功关闭,实际时间: {actual_time_disable:.2f} 秒")else:print(f"{service_name.capitalize()}关闭失败,超出{disable_duration}秒限制")except Exception as e:print(f"发生错误: {e}")# 执行蓝牙开关切换
toggle_service("bluetooth", "svc bluetooth enable", "svc bluetooth disable", "1", 5, 3, 30)# 如果需要切换WiFi,可以调用以下方法
# toggle_service("wifi", "svc wifi enable", "svc wifi disable", "1", 5, 3, 30)
3. 代码分析
  • 检查服务状态check_service_state 方法通过执行 ADB 命令来检查蓝牙或 WiFi 的当前状态。如果返回值是 "1",则表示服务开启;如果是 "0",则表示服务关闭。

  • 等待并检查状态wait_and_check_service_state 方法在指定的时间内定期检查服务的状态,以确认服务是否成功开启或关闭。

  • 切换服务状态toggle_service 方法是整个脚本的核心,它接收服务名称、开启和关闭服务的命令、成功状态值及时间限制作为参数。该方法会尝试打开和关闭指定的服务,并在控制台输出相关状态信息。

4. 运行脚本

在脚本的最后部分,我们调用 toggle_service 方法来切换蓝牙的状态。如果需要切换 WiFi,只需取消对 toggle_service 方法的注释并传入相应的参数即可。

5. 总结

通过本示例,你可以轻松地使用 Python 脚本来控制 Android 设备的蓝牙和 WiFi 状态。这种方法具有很高的灵活性,可以根据需要扩展以支持更多的服务状态检查和控制。希望这篇博客能帮助你在自动化测试和设备管理方面取得更好的成效!


http://www.ppmy.cn/news/1545281.html

相关文章

交换区(Swap Area或Swap Partition)

在操作系统中&#xff0c;交换区&#xff08;Swap Area或Swap Partition&#xff09;扮演着至关重要的角色&#xff0c;主要用于在物理内存&#xff08;RAM&#xff09;不足时提供额外的虚拟内存空间。以下是交换区的主要功能和作用&#xff1a; 一、内存扩展 当系统的物理内…

Java项目实战II基于Spring Boot的智能家居系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着物联网技术的快速发展和普及&#…

编程语言之战:AI 之后的 Kotlin 与 Java

随着人工智能不断重塑科技格局&#xff0c;开发人员越来越面临选择哪些编程语言在 AI 开发方面最有利和有效的任务。 考虑到 AI 和机器学习的快速发展&#xff0c;一种编程语言是否更适合满足这一不断发展的领域的需求&#xff1f; 自 1995 年问世以来&#xff0c;Java 一直是编…

CC1310 CCS 记录20241107

导 入工程后失败 环境为CCS 10.4导入为12.8 Description Resource Path Location Type Referenced project tirtos_builds_CC1310_LAUNCHXL_release_ccs does not exist in the workspace. Project CC1310_DataReceiver_awce may not build as expected. CC1…

2024年前三季度币安、OKX等五大交易所上币表现分析

随着加密市场竞争的加剧&#xff0c;头部交易所逐渐在上币策略、代币选择、交易活跃度等方面采取了不同的应对策略。Animoca Digital Research近期发布的一份报告&#xff0c;通过对币安、OKX、Bitget、KuCoin和Bybit五大交易所2024年前三季度的上币情况进行了详细分析。本文将…

推荐一款业内领先的建模工具:SAP PowerDesigner

SAP PowerDesigner是一款业内领先的建模工具&#xff0c;帮助您改进商务智能&#xff0c;打造更卓越的信息架构。通过该软件的元数据管理功能&#xff0c;可以构建关键信息资产的 360 度全方位视图&#xff0c;从而使数据管理、BI、数据集成和数据整合工作大获裨益。其分析功能…

Qt桌面应用开发 第三天(QMainWindow)

目录 1.QMainWindow 1.1菜单栏 1.2工具栏 1.3状态栏 1.4铆接部件和核心部件 1.4.1铆接部件 1.4.2核心部件 1.QMainWindow 1.1菜单栏 为用户提供主窗口程序的类。一个主窗口最多只有一个菜单栏&#xff0c;位于主窗口顶部&#xff0c;标题栏下面。 创建步骤&#xff1a…

【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型

一、介绍 车辆车型识别&#xff0c;使用Python作为主要编程语言&#xff0c;通过收集多种车辆车型图像数据集&#xff0c;然后基于TensorFlow搭建卷积网络算法模型&#xff0c;并对数据集进行训练&#xff0c;最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操…