手机投屏到电脑
Github 有2个开源的手机投屏项目:
Scrcpy: https://github.com/Genymobile/scrcpy
QtScrcpy: https://github.com/barry-ran/QtScrcpy
这2个项目都很好用,我这里用的是 Scrcpy:
官方文档中介绍了如何在windows上使用 Scrcpy 连接手机:
使用 USB 数据线连接上电脑,打开 USB 调试(需要先打开开发者选项功能,不同手机可以在百度搜索开启),
插上充电线的时候要选择 “传输文件” 选项,不然后面连接的时候会显示找不到设备:
上面的准备完成之后,打开 Scrcpy ,点击 open_a_terminal_here.bat 选项打开命令行窗口,输入
scecpy
即可连上手机,连不上,可以使用下列命令查看是否有扫描到设备。
./adb devices
第二种方式是通过无线连接:
我这里是手机开热点给电脑连。
首先找到手机的 IP,小米10 可以通过下列路径找到 IP,
“我的设备” 》 “全部参数与信息” 》“状态信息” 》“IP 地址”。
然后在 windows 命令行窗口输入
./adb tcpip 5555
./adb connect 10.138.xxx.xxx 5555
./scrcpy.exe
到此,即可连上手机。
如果又用 usb 接口连过,又用 IP 连过,那么下次再连接的时候会报错
这个报错意味着在使用scrcpy时,检测到多个ADB设备连接。在你的情况下,有两个设备已经连接:
通过USB连接的设备,序列号为96a7xxxx,设备名为Mi_10。
通过TCP/IP连接的设备,IP地址为10.138.xxx.xxx,端口为5555,设备名为Mi_10。
由于存在多个设备连接,scrcpy需要你指定要使用的设备。你可以通过以下选项来选择要使用的设备:使用 -s 或 --serial 选项,后接设备的序列号来选择USB连接的设备。
使用 -d 或 --select-usb 选项来选择USB连接的设备。
使用 -e 或 --select-tcpip 选项来选择TCP/IP连接的设备。
你可以根据需要选择要连接的设备,并在命令中指定相应的选项来解决这个问题。
当面对多个设备连接时,你可以通过以下示例命令来选择要使用的设备:
选择USB连接的设备
# 第一次要先声明使用 usb 连接:
.\adb.exe usb
# restarting in USB mode
# 然后执行后面的命令
scrcpy -s 96a7xxxx
# 或者
scrcpy -d
选择TCP/IP连接的设备
# 第一次要先声明使用 tcpip 连接:
.\adb.exe tcpip 5555
# restarting in TCP mode port: 5555
.\adb.exe connect 10.138.241.249:5555
# connected to 10.138.241.249:5555
# 然后执行后面的命令
scrcpy -s 10.138.xxx.xxx:5555
# 或者
scrcpy -e
查看设备数
.\adb.exe devices
# List of devices attached
# 96a7xxxx device
删除 TCP/IP连接的设备
.\adb.exe disconnect 10.138.241.249:5555
#disconnected 10.138.241.249:5555
另外:如果鼠标滑动手机报如下错的话,
# 参考 github 链接: https://github.com/Genymobile/scrcpy/issues/4334
# https://github.com/Genymobile/scrcpy/blob/master/FAQ.md#mouse-and-keyboard-do-not-work
[server] ERROR: Could not invoke method
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.genymobile.scrcpy.wrappers.InputManager.injectInputEvent(InputManager.java:37)
at com.genymobile.scrcpy.Device.injectEvent(Device.java:225)
at com.genymobile.scrcpy.Device.injectKeyEvent(Device.java:236)
at com.genymobile.scrcpy.Device.pressReleaseKeycode(Device.java:244)
at com.genymobile.scrcpy.Device.pressReleaseKeycode(Device.java:249)
at com.genymobile.scrcpy.Controller.control(Controller.java:70)
at com.genymobile.scrcpy.Controller.lambda$start$0$com-genymobile-scrcpy-Controller(Controller.java:91)
at com.genymobile.scrcpy.Controller$$ExternalSyntheticLambda1.run(Unknown Source:4)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.SecurityException: Injecting input events requires the caller (or the source of the instrumentation, if any) to have the INJECT_EVENTS permission.
at android.os.Parcel.createExceptionOrNull(Parcel.java:3011)
at android.os.Parcel.createException(Parcel.java:2995)
at android.os.Parcel.readException(Parcel.java:2978)
at android.os.Parcel.readException(Parcel.java:2920)
at android.hardware.input.IInputManager$Stub$Proxy.injectInputEventToTarget(IInputManager.java:1294)
at android.hardware.input.InputManager.injectInputEvent(InputManager.java:1153)
at android.hardware.input.InputManager.injectInputEvent(InputManager.java:1182)
... 10 more
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.input.InputManagerService.injectInputEventToTarget(InputManagerService.java:908)
at android.hardware.input.IInputManager$Stub.onTransact(IInputManager.java:617)
at android.os.Binder.execTransactInternal(Binder.java:1285)
at android.os.Binder.execTransact(Binder.java:1249)
可以参考下面的方案解决:
打开USB调试按钮,重启手机即可。