基于Flutter/Dart实现安卓电视电源状态检测与应用启动
检测同一网络下安卓电视电源状态&启动应用的简便方案
一、基础在线状态检测:Ping/Socket连接
这是最轻量化的方式,无需电视端额外配置(部分深度待机的电视可能不响应,但多数待机/开机状态下有效):
- 使用
ping_discover_network包快速扫描局域网内电视IP的可达性,代码示例:
import 'package:ping_discover_network/ping_discover_network.dart'; Future<bool> isTvOnline(String tvIp) async { final result = await PingDiscoverNetwork.ping(tvIp, port: 5555, timeout: 2); return result.success; }
- 或者直接用Dart内置的
Socket尝试连接电视常用端口(比如ADB默认的5555,或DLNA的8080),连接成功则说明设备在线:
import 'dart:io'; Future<bool> checkTvConnection(String tvIp) async { try { final socket = await Socket.connect(tvIp, 5555, timeout: Duration(seconds: 2)); socket.close(); return true; } catch (_) { return false; } }
二、ADB命令(无需电视端APP,需开启调试)
如果电视开启了网络ADB调试(多数安卓电视可在开发者选项中开启),可以直接用ADB命令获取电源状态、启动应用:
- 检测电源状态:通过
adb shell dumpsys power命令解析输出,判断是否处于开机状态 - 启动应用:使用
adb shell am start -n 包名/类名(比如启动Netflix:adb shell am start -n com.netflix.ninja/.MainActivity) - Flutter中可通过
Process.run调用系统ADB命令,示例:
import 'dart:io'; Future<bool> isTvPowerOn(String tvIp) async { await Process.run('adb', ['connect', '$tvIp:5555']); final result = await Process.run('adb', ['shell', 'dumpsys power | grep "mPowerState="']); return result.stdout.toString().contains('SCREEN_ON'); } Future<void> launchTvApp(String tvIp, String appComponent) async { await Process.run('adb', ['connect', '$tvIp:5555']); await Process.run('adb', ['shell', 'am start -n $appComponent']); }
注意:需确保设备(手机/平板)安装了ADB工具,且电视已开启网络ADB调试。
三、Wake-on-LAN(WoL)+状态验证
如果电视支持WoL功能(多数智能电视支持,需在电视设置中开启),可以结合WoL实现唤醒+状态检测:
- 使用
wake_on_lan包发送魔术包唤醒电视,再通过Ping/Socket验证是否开机:
import 'package:wake_on_lan/wake_on_lan.dart'; Future<void> wakeTv(String tvMac) async { final ip = InternetAddress('255.255.255.255'); // 广播地址 await WakeOnLAN.send(ip, tvMac); }
- 关机判断:若Ping多次无响应,且发送WoL后能成功连接,则判定之前处于关机状态。
四、DLNA/UPnP设备状态查询
安卓电视基本都支持DLNA,可通过UPnP协议查询设备状态:
- 使用
upnp包发现局域网内的电视设备,查询设备的在线状态;部分设备会上报电源状态属性 - 启动应用:部分支持UPnP的电视可通过发送特定指令启动应用,需提前获取应用的对应UPnP服务标识
注意事项
- 不同电视的待机逻辑差异大:部分电视待机时仍保持网络连接,部分则完全断开,需根据目标机型测试
- 部分功能(如ADB、WoL)需要用户手动在电视端开启对应设置
- 所有操作需确保手机与电视处于同一WiFi局域网
内容的提问来源于stack exchange,提问作者stan92i
相关产品推荐
相关产品推荐

