我如何用 Claude Code 控制我的索尼电视
我的索尼电视以为自己在美国。我想让菜单保持英文,但也想让电视知道它在日本,因为我要找的那个日本流媒体应用一直不出现。语言菜单里只有英语(美国)或日语,没有中间选项。
于是我让 Claude Code 从我的 Mac 通过 Wi-Fi 来解决。它找到了电视,读取了设置,改了地区,重启了电视,然后把 Play 商店之前拒绝我的那个应用装上了。我拿起遥控器只是为了打开一个设置、确认一个对话框。
任何运行 Google TV 或 Android TV 的索尼 BRAVIA 都能这么做,大多数基于 Android 的电视也一样。
不碰任何东西,Claude 能看到什么
先让 Claude 找到电视。你不需要知道它的 IP 地址,这样一句话就够了:
在本地网络里找到我的电视。查看 mDNS 和 SSDP,告诉我品牌、
型号、IP,以及它开放了哪些控制接口。
BRAVIA 会同时用好几种方式宣告自己:作为 Chromecast 投屏目标、AirPlay 接收端、Android TV 遥控对象,还有索尼自己的发现协议。Claude 用 Mac 自带的工具(比如 dns-sd)逐个查看这些服务,几秒钟就能带回型号和地址。
索尼电视本身还运行着一个小小的 Web API。不配对的情况下,它只回答几个无害的问题:型号、屏幕是否开着、当前时间。任何会改变电视的操作都需要你在电视上设置的 PIN 或密钥。Chromecast 那边还会告诉你一件有用的事:电视认为自己处在哪种语言和哪个国家。我的显示的是 en-US 和 US。
不改电视上的设置,能做的就到这里。要真正操控它,需要打开一个开关。
打开 ADB 调试
ADB 是 Android 调试桥,也就是应用开发者用来和手机通信的工具。Google TV 底层就是 Android,所以电视也懂它。用遥控器操作一分钟就能打开:
- 在系统设置里打开设备信息页面,把 Android TV OS 版本号那一行连续选择七次,直到电视提示你已成为开发者。
- 在开发者选项里打开 USB 调试。索尼电视会同时开放网络调试。
- 告诉 Claude。它对电视地址执行
adb connect,电视会弹出对话框,问是否允许这台电脑。勾选始终允许,然后按确定。
这个对话框就是安全的关键。在你在屏幕上批准某台具体的电脑之前,网络上的任何设备都无法控制电视。
批准之后,Claude 就能像拿着遥控器的人一样操作,不同的是它还能读屏幕:
adb exec-out screencap -p截一张图,Claude 在每一步前后都能看到电视上显示的内容。uiautomator dump列出屏幕上每个文字和按钮及其位置,它不用去猜东西在哪里。input keyevent按遥控器上的键:上、下、确定、返回、主页。am start直接打开任意页面或应用,包括 Play 商店的某个页面。
英文菜单,日本地区
Android 把语言和地区合在一起存成一个 locale,比如 en-US 或 ja-JP。电视的语言列表只提供索尼决定内置的组合。但系统本身接受任何有效的 locale,包括 en-JP:界面是英文,国家是日本。
Android 12 没有现成的命令做这件事,所以 Claude 写了一个。那是一个很小的 Java 程序,在 Mac 上用 Android SDK 编译,推送到电视上,再用 app_process 运行。这样它以 shell 用户身份运行,而 shell 用户有权修改系统配置:
Object am = Class.forName("android.app.ActivityManager")
.getMethod("getService").invoke(null);
Configuration c = (Configuration) am.getClass()
.getMethod("getConfiguration").invoke(am);
c.setLocales(LocaleList.forLanguageTags("en-JP"));
Configuration.class.getField("userSetLocale").setBoolean(c, true);
am.getClass().getMethod("updatePersistentConfiguration",
Configuration.class).invoke(am, c);
Claude 先用只读模式运行一次,打印出当前的 locale,然后正式运行,再重启电视,确认重启后 en-JP 还在。菜单依然是英文。用 en-US 再运行一次就能全部还原。
你不需要自己写这段代码,只要说出你想要的结果:
电视已经通过 ADB 连接。请把系统 locale 设为英语、地区为日本,
不要改变菜单语言。给我看修改前后的 locale,重启电视,并确认设置保留了下来。
安装商店说你不能装的应用
我想装的是 SKY PerfecTV 的流媒体应用。只改地区并没有让它出现。Claude 在电视上打开它的 Play 商店页面并截了图:该内容在您所在的国家/地区不可用。
这条提示和电视无关。Play 商店的国家属于你的 Google 账号,不跟随电视的地区,也不跟随你的 IP 地址。Claude 查看了所有你以为能改的地方:Play 商店网页版没有国家设置,电视上的 Play 商店也没有。
唯一能改的地方,是登录同一账号的 Android 手机上的 Play 商店应用:在设置里的账号和设备偏好设置中,找到国家和个人资料。这里只列出你拥有 Google 付款资料的国家,而且 Google 大约一年只允许改一次,所以要想清楚再改。
我在一部旧 Android 手机上登录,接到 Mac 上,Claude 就像操作电视一样通过 ADB 操作手机。手机上有两个 Google 账号,Play 商店打开时用的是另一个,所以 Claude 在动国家设置之前先切换了账号。换我自己大概不会注意到。改完之后,它关掉电视上的 Play 商店让它重新读取新国家,再次打开应用页面,这次出现了安装按钮。它按下按钮,等了一会儿,按钮变成了打开。
它在哪里停下来问我
我最喜欢的部分,是 Claude 没有一路做下去的那些时刻。
它从来没有自己打开任何降低安全性的设置,而是把遥控器上的操作步骤交给我,而不是去找绕过的办法。在改 Play 商店国家之前,它告诉我这项改动一年内无法撤回,并等我同意。新应用打开后停在一个带同意按钮的隐私政策页面,它也停下来问我,因为同意条款是我的决定,不是脚本里的一个步骤。
如果你也这样设置,请保留同样的界线。让它自由地读取、查看和浏览。凡是同意、购买、删除或无法撤回的操作,都要它先问你。
用完记得收尾
ADB 会把电视的完全控制权交给被批准的电脑。这正是目的,但你大概不想让它一直开着。用完后在开发者选项里关闭 USB 调试,或者让 Claude 在最后一步替你关掉。locale 的修改会保留。
让我意外的是,整个过程非常普通。我没有装任何特别的应用,也没有买智能家居网关。电视本来就在我的网络上讲着三四种协议,Claude 只是一种一种地读下去,直到有一种让它进去。