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

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

1. 环境准备

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

bash 复制代码
adb devices

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

2. 脚本解析

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

python 复制代码
import subprocess
import time
import threading

def 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 None

def wait_and_check_service_state(service_name, success_value, duration, interval):
    """在指定时间内间隔检测服务状态"""
    stop_time = time.time() + duration
    while time.time() < stop_time:
        current_state = check_service_state(service_name)
        if current_state == success_value:
            return True
        time.sleep(interval)
    return False

def 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_enable
            print(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_disable
            print(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 状态。这种方法具有很高的灵活性,可以根据需要扩展以支持更多的服务状态检查和控制。希望这篇博客能帮助你在自动化测试和设备管理方面取得更好的成效!

相关推荐
花花鱼2 小时前
android studio 设置让开发更加的方便,比如可以查看变量的类型,参数的名称等等
android·ide·android studio
蹦蹦跳跳真可爱5894 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij4 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
alexhilton4 小时前
为什么你的App总是忘记所有事情
android·kotlin·android jetpack
雷羿 LexChien4 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
敲键盘的小夜猫5 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_12205 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
胖达不服输6 小时前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩6 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩7 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm