Android 移动端投屏 开发文档
文档版本: v3 | 更新日期: 2026-01-29
一、环境准备
1. 下载所需文件
Android WIN 投屏需要下载的文件下载地址:安卓投屏_sdk_20260113.zip。
2. 环境准备
-
开发工具: 需匹配 gradle 版本,推荐使用兼容 gradle 7.1.2 的 Android Studio 版本,如 Arctic Fox 或 Bumblebee,避免版本过老或过新导致兼容性问题)。
-
Gradle 版本:项目指定 classpath 为com.android.tools.build:gradle:7.1.2,无需手动修改,项目已配置对应版本。
-
依赖支持:com.android.support:support-v4:28.0.0(SDK 核心依赖,需确保配置正确)。
3. 导入项目
目录结构:
以下是 Android_SDK 的完整目录,帮助您理解如何组织和使用SDK文件:
sdk_20260113/
├── demo/ // 示例项目目录(可直接导入Android Studio)
│ ├── .gradle/
│ │ ├── 7.3.3/
│ │ │ ├── checksums/
│ │ │ │ ├── checksums.lock
│ │ │ │ ├── md5-checksums.bin
│ │ │ │ └── sha1-checksums.bin
│ │ │ ├── dependencies-accessors/
│ │ │ │ ├── dependencies-accessors.lock
│ │ │ │ └── gc.properties
│ │ │ ├── executionHistory/
│ │ │ │ ├── executionHistory.bin
│ │ │ │ └── executionHistory.lock
│ │ │ ├── fileChanges/
│ │ │ │ └── last-build.bin
│ │ │ ├── fileHashes/
│ │ │ │ ├── fileHashes.bin
│ │ │ │ ├── fileHashes.lock
│ │ │ │ └── resourceHashesCache.bin
│ │ │ ├── vcsMetadata/
│ │ │ │ └── gc.properties
│ │ │ ├── buildOutputCleanup/
│ │ │ │ ├── buildOutputCleanup.lock
│ │ │ │ ├── cache.properties
│ │ │ │ └── outputFiles.bin
│ │ │ ├── checksums/
│ │ │ │ ├── checksums.lock
│ │ │ │ └── sha1-checksums.bin
│ │ │ ├── configuration-cache/
│ │ │ │ └── gc.properties
│ │ │ ├── vcs-1/
│ │ │ │ └── gc.properties
│ │ │ ├── vcsWorkingDirs/
│ │ │ │ └── gc.properties
│ │ │ └── file-system.probe
│ ├── .idea/
│ │ ├── caches/
│ │ │ ├── build_file_checksums.ser
│ │ │ │ └── gradlie_models.ser
│ │ ├── code/
│ ├── app/ // 应用模块核心目录
│ │ ├── libs/ // SDK依赖存放目录(含lgDeviceSdk相关aar文件)
│ │ │ ├── lgDeviceSdk_20240129.aar
│ │ │ └── lgDeviceSdk_20260113.aar
│ │ ├── src/ // 源代码、资源文件、配置文件目录
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── huang/
│ │ │ │ │ └── demo/
│ │ │ │ │ ├── devicesdk/
│ │ │ │ │ │ └── DeviceControlActivity.java
│ │ │ │ │ └── MainActivity.java
│ │ │ │ ├── res/
│ │ │ │ │ ├── drawable/
│ │ │ │ │ ├── drawable-xhdpi/
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── layout/
│ │ │ │ │ │ ├── activity_demo.xml
│ │ │ │ │ │ └── activity_edit.xml
│ │ │ │ │ └── values/
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ └── styles.xml
│ │ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle // 模块级构建配置文件
│ │ ├── percentlib.iml
│ │ └── proguard-rules.pro
│ ├── build/
│ │ ├── intermediates/
│ │ │ ├── lint-cache/
│ │ │ │ ├── maven.google/
│ │ │ │ │ ├── com/
│ │ │ │ │ └── master-index.xml
│ │ │ │ └── sdk-registry.xml/
│ │ │ │ └── sdk-registry.xml
│ │ │ └── proguard-files/
│ │ │ ├── proguard-android-optimize.txt-3.2.1
│ │ │ ├── proguard-android.txt-3.2.1
│ │ │ └── proguard-defaults.txt-3.2.1
│ ├── gradle/ // Gradle包装器目录
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── build.gradle // 项目级构建配置文件
│ ├── gradlew
│ ├── gradlew.bat
│ ├── import-summary.txt
│ ├── local.properties
│ └── settings.gradle // 项目模块配置文件
├── android_sdk_开发文档_20260112.doc // 旧版SDK说明文档
├── lgDeviceSdk_20260113.aar // V1.3版本SDK核心文件
└── 使用说明_20260113.pdf // 新版SDK详细说明文档
二、 Android Studio 项目导入步骤
1. 打开项目
-
启动 Android Studio,点击
Open(或File->Open)。 -
在文件浏览器中选择sdk_20260113目录,点击「OK」。
-
等待项目加载完成,Android Studio 会自动加载 gradle 配置并下载依赖,需确保网络通畅,同步完成后无红叉报错。
2. 项目配置验证
⚠️ sdk_20260113 文件中的 demo 基本配置已完成,无需额外操作,可跳过这一部分直接跳到四、 启动安卓投屏。如有其他需求,可查看安卓投屏_sdk_20260113/使用说明_20260113.pdf或安卓投屏\_sdk_20260113/android_sdk*开发文档\_20260112.doc。
检查SDK依赖:打开app/libs文件,复制 lgDeviceSdk 到 libs 目录中。
验证 build.gradle 配置:模块级 build.gradle(demo/app/build.gradle)中新增如 下配置:
android {
repositories {
flatDir {
dirs 'libs'
}
}
}
implementation 'com.android.support:support-v4:28.0.0'
implementation(name:' lgDeviceSdk', ext:'aar')
权限配置检查:打开app/src/main/AndroidManifest.xml,确认已添加相机和录音权限(若需使用相关功能):
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
三、 核心功能开发流程(基于 V1.3 版本 SDK)
1. SDK 初始化
-
在 Android Studio 左侧「Project」面板中,展开项目目录:
demo → app → src → main → java → com → huang → demo → MainActivity.java -
双击
MainActivity.java,在右侧编辑区打开该文件。找到@Override方法,tianjia SDK 初始化代码逻辑:
//内网测试
DeviceSdkInstance.getInstance().initSdk(getApplicationContext() {
@Override
public void initFinish(boolean b) {
//初始化结果
Log.e(TAG, "init end:" + b);
}
2. 新建DeviceControlActivity
- 在 Android Studio 左侧「Project」面板中,展开项目目录:
demo → app → src → main → java → com → huang → demo → devicesd,在该目录下新建DeviceControlActivity.java文件并继承BaseDeviceControlActivity。
注:BaseDeviceControlActivity类中部分方法
a. 在DeviceControlActivity中可以通过setContentView新增自定义view
b. goFinish(), 控制结束时回调
c.pageGoBehind(),当手机页面切换导致传屏终止时回调,用户自行退出或者出错时不会回调此方法
如果不关注以上信息,可以不用定义 DeviceControlActivity,直接进入3. 连接设备。
3. 连接设备
- 配置连接参数:通过 ConnectInfo 类封装连接信息(IP、端口、令牌等):
textView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
ConnectInfo info = new ConnectInfo("ip", 1552, 1552, 1552, 1552);
//设置令牌
info.setPass("token");
//设置自定义传参
info.setIntent(intent);
DeviceSdkInstance.getInstance().startConnectDevice(info);
}
});
端口说明:
| 参数 | 类型 | 含义 |
|---|---|---|
| ip | string | android容器的ip |
| port1 | int | 视频流端口 tcp |
| port2 | int | 控制流端口 udp |
| port3 | int | 摄像头的端口 tcp (可选参数) |
| port4 | int | 摄像头端口 udp(可选参数) |
| Token | string | 鉴权令牌 (可选参数) |
说明:
端口号存在两种情况:
-
若android容器为独立ip,则端口是固定值
-
port1:10000
-
port2:10001
-
port3:10006
-
port4:10007
-
-
若android容器为共享主机IP 则端口计算的规则是:
-
Port1(tcp):10000+ index*3
-
Port2(udp):10001 + index*3
-
Port3(tcp): 11011 + (index-1) * 10
-
Port4(udp): 11012 + (index-1) * 10
其中index为坑位索引编号
-
-
Token: 鉴权令牌 (可选参数)
与SDK配合使用,可以通过调用SDK的方法设置访问令牌,实现访问的鉴权。如果不需要鉴权就不需要传递此参数。
部分方法说明:
-
initSdk():初始化 sdk。 -
isInited():判断 sdk 是否初始化过。 -
startConnectDevice():连接设备,接口回调的状态可以定义动画等操作,需要在 UI 线程中处理,成功后设备会自动到控制页面。 -
releaseSdk():释放 sdk,当不再需要连接设备时,可释放 sdk,释放后如果再使用需要重新初始化。 -
setScreenOrientation():在连接设备前,设置连接过程的屏幕方向,默认横屏, true=>横屏, false=>竖屏。
4. 自定义 UI
如果需要较大范围的自定义控制页面的界面和控制,需要走本步骤实现。
(1) 在应用包名 .devicesdk 目录下,新 建CustomDeviceControlActivity并继承
CustomBaseDeviceControlActivity,并在 AndroidManifest.xml 中注册
(2) 连接设备时需要设置 setCustomUi(true)
(3) 自定义 UI,CustomDeviceControlActivity可调用的方法如下:
| 方法名 | 作用 | 补充 |
|---|---|---|
| void initVideoContainer(FrameLayout contrainer); | 提供基础控制的 UI 容器 | 必须调用 |
| void showConnectLoading() | 显示 “连接中” 加载动画 | 发起连接前(startConnectDevice 之前)调用 |
| void hideConnectLoading() | 隐藏加载动画 | |
| void sendHomeEvent() | 发送 “Home 键” 事件 | |
| void sendTaskEvent() | 发送 “任务栏” 事件 | |
| void sendBackEvent() | 返回事件 | |
| void sendVoiceUpEvent() | 音量加事件 | |
| void sendVoiceDownEvent() | 音量减事件 | |
| void switchCamera() | 使用相机功能时切换摄像头 | |
| boolean cameraIsOpened() | 相机是否打开 | |
| boolean audioIsOpened() | 录音是否打开 | |
| boolean needShowAskOpenCameraOrAudioDialog() | 开启相机或录音前是否需要弹窗询问 | |
| showAskOpenCameraOrAudioDialog() | 显示自定义询问弹窗 | |
| selectOpenCameraOrAudio() | 允许开启相机或录音 | 询问弹窗点击后调用 |
| selectDenyOpenCameraOrAudio() | 拒绝开启相机或录音 | 询问弹窗点击后调用 |
| void cameraOpened() | 相机开启 | |
| void cameraClosed() | 相机关闭 | |
| void audioOpened() | 录音开启 | |
| void audioClosed() | 录音关闭 | |
| quitControl() | 结束控制,退出页面 |
四、 启动安卓投屏
步骤 1:启动模拟器:
-
点击 Android Studio 顶部工具栏的「Device Manager」(手机图标)
-
选择已创建的模拟器(如「Medium Phone API 36.1」),点击右侧「启动」按钮(绿色三角形
-
等待模拟器启动完成(需几分钟,首次启动较慢)。
步骤 2:运行项目(启动应用):
-
点击 Android Studio 顶部工具栏的「Run」按钮(绿色三角形图标,快捷键 Shift + F10
-
等待项目编译和安装(首次运行会编译所有代码,需几十秒,后续运行会更快)。
示例图:
