Android 基于agora 开发视频会议的代码
作者:苹果园dog 发布时间:2021-11-30 02:53:04
标签:Android,agora,视频会议
一、概述
参照官方demo,基于agora开发,输入会议号(频道)和显示名称 参会,可设置参会选项。
支持用户注册和登录。
支持多人参会。
二、效果
三、代码
package io.agora.openvcall.ui;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Switch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.agora.openvcall.R;
import io.agora.openvcall.model.ConstantApp;
import io.agora.openvcall.ui.mycode.common;
public class MainActivity extends BaseActivity {
private final static Logger log = LoggerFactory.getLogger(MainActivity.class);
private String username;
private String password;
private String name;
private int user_id;
private String show_name;
private boolean videomute;
private boolean audiomute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
ab.setCustomView(R.layout.ard_agora_actionbar);
}
initP();
}
private void initP(){
String show_name = common.getName();
if(!TextUtils.isEmpty(show_name)){
this.name=show_name;
this.show_name=show_name;
common.setName(show_name);
EditText et = findViewById(R.id.user_name);
et.setText(show_name);
}
String _username = common.getUsername();
if(!TextUtils.isEmpty(_username)){
username=_username;
}
String _password = common.getPassword();
if(!TextUtils.isEmpty(_password)){
password=_password;
}
user_id = common.getUser_id();
}
public void onBackPressed(View view) {
onBackPressed();
}
@Override
protected void initUIandEvent() {
EditText v_channel = (EditText) findViewById(R.id.channel_name);
v_channel.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
String lastChannelName = vSettings().mChannelName;
if (!TextUtils.isEmpty(lastChannelName)) {
v_channel.setText(lastChannelName);
v_channel.setSelection(lastChannelName.length());
}
}
@Override
protected void deInitUIandEvent() {
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_settings:
forwardToSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void onClickJoin(View view) {
forwardToRoom();
}
public void forwardToRoom() {
EditText v_channel = (EditText) findViewById(R.id.channel_name);
String channel = v_channel.getText().toString();
if(TextUtils.isEmpty(channel)){
showLongToast("请输入会议号!");
return;
}
vSettings().mChannelName = channel;
Intent i = new Intent(MainActivity.this, CallActivity.class);
i.putExtra(ConstantApp.ACTION_KEY_CHANNEL_NAME, channel);
//i.putExtra(ConstantApp.ACTION_KEY_ENCRYPTION_KEY, encryption);
i.putExtra(ConstantApp.ACTION_KEY_ENCRYPTION_MODE, getResources().getStringArray(R.array.encryption_mode_values)[vSettings().mEncryptionModeIndex]);
i.putExtra("username",username);
i.putExtra("password",password);
i.putExtra("name",name);
i.putExtra("user_id",user_id);
i.putExtra("videomute",videomute);
i.putExtra("audiomute",audiomute);
EditText show_name_E = (EditText) findViewById(R.id.user_name);
String _show_name = show_name_E.getText().toString();
i.putExtra("show_name",_show_name);
startActivity(i);
finish();
}
public void forwardToSettings() {
Intent i = new Intent(this, io.agora.openvcall.ui.SettingsActivity.class);
startActivity(i);
}
@Override
public void permissionGranted() {
}
public void onSwitch_audio(View view) {
boolean isChecked = ((Switch) view).isChecked();
this.audiomute=!isChecked;
}
public void onSwitch_video(View view) {
boolean isChecked = ((Switch) view).isChecked();
this.videomute=!isChecked;
}
}
来源:https://blog.csdn.net/u014556081/article/details/113178268
0
投稿
猜你喜欢
- 1 前言Stream 是 java8 中处理集合的抽象概念,可以执行非常复杂的查询、过滤和映射数据等操作。Stream API 提供了一种高
- 前言项目使用了SpringBoot构建项目。下面对动态调整日志的级别进行记录。从版本 1.5.1 之后就提供了基于 spring-boot-
- 代码如下:/** * 动态生成SQ及SQL参数L * @param ve 接收到的消息的CHGLIST &nbs
- 泛型1、简单泛型泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。泛型暂时不指定类型,在使用时决定具体
- PS:本文包含了大部分strings函数的说明,并附带举例说明。本来想自己整理一下的,发现已经有前辈整理过了,就转了过来。修改了原文一些源码
- 这里我们以拨打电话申请权限来写个小例子,也就是CALL_PHONE,因为拨打电话会涉及用户手机的资费问题,因而被列为了危险权限,在Andro
- 网络通信协议中的UDP通信是无连接通信,客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到
- * 验证码地址:https://007.qq.com/online.html* 使用OpenCv模板匹配* 成功率90%左右* Java +
- 如果项目需求是从某些复杂的json里面取值进行计算,用jsonpath+IK(ik-expression)来处理十分方便,jsonpath用
- 1、Aware 系列接口Aware 系列接口是用来获取 Spring 内部对象的接口。Aware 自身是一个顶级接口,它有一系列子接口,在一
- 本文实例为大家分享了java开发利用jacob将word转pdf的具体代码,供大家参考,具体内容如下jacob 缺点:需要 window 环
- JAVA 中Spring的@Async用法总结引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方
- 延迟队列延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者
- 在springmvc中controller的结果集可通过json格式传到js前端接受,也可以通过Map传给前端,具体实现如下1,通过json
- 最近没事写了一个简易浏览器,在刚开始写的时候遇到一些问题,主要的问题就是如何在自己的webview中显示所有的网页数据,不过不指
- 1、static关键字1.1 使用static关键字定义属性在讲解static定义属性操作之前,首先编写如下一道程序。现在定义一个表示中国人
- 前言在实现红黑树之前,我们先来了解一下符号表。符号表的描述借鉴了Algorithms第四版,详情在:https://algs4.cs.pri
- Java事件处理机制和适配器最重要的是理解事件源,监视器,处理事件的接口的概念。1.事件源:是能够产生时间的对象都可以叫事件源,比如文本框,
- C#类如下:using System;using System.Collections.Generic;using System.Text;
- 玩安卓的人都知道adb,玩adb的人都知道install和uninstall,但是为什么adb shell pm install packa