AgoraRTC 拓展:App Inventor 2 实时语音与视频通话
AgoraRTC 是一个面向 App Inventor 2 的实时音视频组件,适合一对一语音/视频通话,也可以作为多人通话的媒体层。底层使用 Agora RTC Android SDK 4.6.3,支持 Android 5.0(API 21)及以上设备。
本拓展负责“媒体通话”,不负责“呼叫邀请”。也就是说,双方需要通过你自己的业务服务器、数据库、推送或聊天系统约定频道名,并取得对应 Token;双方随后调用
JoinChannel才会进入同一个实时音视频频道。
- .aix 拓展下载:
使用前准备
- 在 Agora Console 创建项目并取得 App ID。
- 开发测试可以使用控制台生成的临时 Token;生产环境必须由服务端使用 App Certificate 签发 Token,不能把 App Certificate 放进 App Inventor 应用。
- 设计器中放入两个「垂直布局」作为本地视频区和远端视频区,并把它们分别设置给
LocalVideoView与RemoteVideoView。 - 首次运行需要允许麦克风;视频通话还需要允许摄像头。
最小视频通话示例
两台手机使用相同的 channelName 和有效 Token;uid 可以都传 0,由 Agora 自动分配。
when Screen1.Initialize() {
AgoraRTC1.Initialize()
}
when 按钮_加入.Click() {
AgoraRTC1.JoinChannel("room-1001", 文本输入框1.Text, 0)
}
when AgoraRTC1.JoinedChannel(channel, uid, elapsed) {
标签_状态.Text = join("已加入:", channel, " / UID=", uid)
}
when AgoraRTC1.RemoteUserJoined(uid) {
标签_状态.Text = join("对方已加入,UID=", uid)
}
when AgoraRTC1.ErrorOccurred(code, message) {
标签_状态.Text = join("错误 ", code, ":", message)
}
when 按钮_离开.Click() {
AgoraRTC1.LeaveChannel()
}
如果只做语音通话,把
VideoEnabled设为false,不需要设置两个视频布局,也不会申请摄像头权限。
呼叫邀请的推荐结构
用户 A ──业务服务器/数据库/推送──▶ 用户 B
│ │
└────── channelName + Token ───────┘
│
AgoraRTC.JoinChannel
业务服务器至少应完成:创建通话记录、生成不重复的频道名、为参与者生成短期 Token、处理拒接/超时/挂断。App 端只保存 App ID,不保存 App Certificate。
属性
- AppId
- Agora 项目的 App ID。
- VideoEnabled
- 是否发布本地摄像头视频。默认
True;设置为False即为纯语音通话。 - LocalVideoView
- 本地视频容器。应选择「垂直布局」「水平布局」等可容纳子视图的可见布局组件。
- RemoteVideoView
- 远端视频容器。第一个远端用户加入后会自动显示;多人场景可调用
ShowRemoteVideo(uid)切换显示对象。
方法
- Initialize()
- 初始化 Agora 引擎。可以不调用,
JoinChannel会自动初始化。 - JoinChannel(channelName, token, uid)
- 加入实时音视频频道。两台设备必须使用相同频道名;
uid=0表示由 Agora 自动分配 UID。生产环境使用服务端 Token。 - LeaveChannel()
- 离开当前频道,停止预览并移除本地/远端视频渲染视图。
- MuteLocalAudio(muted)
- 静音或取消静音本地麦克风。
- MuteLocalVideo(muted)
- 关闭或打开本地视频发布。
- SwitchCamera()
- 在前置和后置摄像头之间切换。
- Speakerphone(enabled)
- 打开或关闭扬声器通道。
- ShowRemoteVideo(uid)
- 在远端视频容器中显示指定 UID 的远端用户视频,适合多人频道切换画面。
- RenewToken(token)
- 提交服务端返回的新 Token。收到
TokenWillExpire后应尽快调用。 - ClearVideoViews()
- 移除视频渲染视图,但不主动离开频道。
事件
- EngineInitialized()
- Agora 引擎初始化成功。
- JoinedChannel(channel, uid, elapsed)
- 成功加入频道;
uid是实际的本地 UID。 - CallStateChanged(state)
- 通话状态变化:
initializing、joining、joined、left或error。 - RemoteUserJoined(uid)
- 远端用户加入频道。
- RemoteUserLeft(uid, reason)
- 远端用户离开频道;
reason为 Agora 原因码。 - RemoteAudioMuted(uid, muted)
- 远端用户静音状态变化。
- RemoteVideoMuted(uid, muted)
- 远端用户视频状态变化。
- ConnectionStateChanged(state, reason)
- 网络连接状态变化;参数是 Agora 数字状态码。
- TokenWillExpire(token)
- 当前 Token 即将过期。重新从服务端取得 Token 后调用
RenewToken。 - ErrorOccurred(code, message)
- 组件或 Agora SDK 报错。
限制与排错
- 这是通信模式通话组件,不是直播推流组件;所有加入者默认可以发布和订阅音视频。
- 使用带原生库的扩展时,AI Companion 必须是支持该扩展的较新版本;如果 Companion 无法加载 Agora,优先直接构建 APK 验证,或更新 Companion。
- 视频区必须是能容纳子 View 的布局组件。若把标签、按钮等非容器组件设置为视频区,会触发
ErrorOccurred。 - 两台设备必须使用同一个 App ID、同一个频道名,并且 Token 的频道名和 UID 要匹配;Token 过期会导致无法加入或被断开。
- 本版本不提供后台通话前台服务、系统来电界面、通讯录、呼叫邀请和通话记录;这些属于业务层,应由 App 自己实现。
扫码添加客服咨询