停了好久的博客,最近找到工作,我的安卓是通过自学的。所来,来的新的公司也不能懈怠,坚持每星期一篇博客。
言归正传,最近公司要开发一款直播app,要接入腾讯云直播以及腾讯云通信。腾讯的api也是看了我半天,也没搞懂,- -
现在搞懂了,所以写一篇博客记录一下。
首先集成腾讯云直播,这个很简单,下载了sdk以后将arr文件copy到Project模式下app/libs,如下图:
一.在app下的build.gradle中需要做两步操作
1:导入sdk,如下:
implementation(name: 'LiteAVSDK_Professional_4.7.4395', ext: 'aar')
2:指定ndk兼容的架构:(我的不是商业版,商业版)
ndk {
abiFilters “armeabi”, “armeabi-v7a”
}
二.在工程目录下的build.gradle中需要一步操作:
allprojects {
repositories {
google()
jcenter()
flatDir { dirs ‘libs’ }
}
} 指定本地代码仓库
接着你只需要添加权限那些东西了,可以参照这里
集成腾讯云通信,这是比较麻烦的。
一.首先下载云通信的sdk,然后将文件夹中libs中的所有文件导入到,如下位置:
注意:还是project模式下
就是jniLibs文件夹,如果没有 就自己创建,文件名不能错
接着在,app/build.gradle中的dependencies标签下 添加
implementation fileTree(include: [’*.jar’], dir: ‘src/main/jniLibs’)
如图:
二.我用的是独立模式,需要生成公私匙,(此时你需要注册腾讯云账号或者登陆已有的腾讯云账号,到控制台,选择模式,然后生成公私匙,接着用在控制台中找到开发辅助工具,获取到USERSIG)(模式的差别可以在这里看)
三.这样就ok了,剩下的你需要看这里,添加权限,以及
注册广播和Activity
重点是这里,它的api调用顺序:
初始化 和 登录是一定要做的,我是新建了一个类,来初始化。(因为 我只要用到群组功能,在直播间创建的时候创建聊天群,所以,并没有没在APPlication类中初始化,而是用到了才初始化。具体代码如下,注意:还需要生成private_key,)
/**
* 直播房间管理
*/
public class AVRoomManager {
//腾讯云通信的APP_ID
private int SDK_APP_ID = 你的appid;
//密匙生成的key
private String USERSIG = 你用private key 生成的;
//腾讯云初始化工具
private TIMManager mTimManager;
private static final String tag = "AVRoomManager";
//腾讯云群组管理
private TIMGroupManager.CreateGroupParam param;
private TIMGroupManager mGroupManager;
//创建的群组ID
private String mGroupId;
//当前群组的人数
private long mNumber;
private TIMListener mListener;
public AVRoomManager(Context context) {
init(context);
mGroupManager = TIMGroupManager.getInstance();
}
//初始化
private void init(final Context context) {
mTimManager = TIMManager.getInstance();
//step 1 初始化sdk配置
TIMSdkConfig config = new TIMSdkConfig(SDK_APP_ID)
.enableCrashReport(false)
.enableLogPrint(true)
.setLogLevel(TIMLogLevel.DEBUG)
.setLogPath(Environment.getExternalStorageDirectory().getPath() + "/justfortest/");
mTimManager.init(context, config);
//step 2 用户配置
TIMUserConfig userConfig = new TIMUserConfig()
//设置用户状态变更事件监听器
.setUserStatusListener(new TIMUserStatusListener() {
@Override
public void onForceOffline() {
//被其他终端踢下线
Log.i(tag, "onForceOffline");
}
@Override
public void onUserSigExpired() {
//用户签名过期了,需要刷新 userSig 重新登录 SDK
Log.i(tag, "onUserSigExpired");
}
})
//设置连接状态事件监听器
.setConnectionListener(new TIMConnListener() {
@Override
public void onConnected() {
Log.i(tag, "onConnected");
}
@Override
public void onDisconnected(int code, String desc) {
Log.i(tag, "onDisconnected");
}
@Override
public void onWifiNeedAuth(String name) {
Log.i(tag, "onWifiNeedAuth");
}
})
//设置群组事件监听器
.setGroupEventListener(new TIMGroupEventListener() {
@Override
public void onGroupTipsEvent(TIMGroupTipsElem elem) {
Log.i(tag, "onGroupTipsEvent, type: " + elem.getTipsType());
}
})
//设置会话刷新监听器
.setRefreshListener(new TIMRefreshListener() {
@Override
public void onRefresh() {
Log.i(tag, "onRefresh");
}
@Override
public void onRefreshConversation(List conversations) {
Log.i(tag, "onRefreshConversation, conversation size: " + conversations.size());
}
});
//消息扩展用户配置
userConfig = new TIMUserConfigMsgExt(userConfig)
//禁用消息存储
.enableStorage(false)
//开启消息已读回执
.enableReadReceipt(true);
//资料关系链扩展用户配置
userConfig = new TIMUserConfigSnsExt(userConfig)
//开启资料关系链本地存储
.enableFriendshipStorage(true)
//设置关系链变更事件监听器
.setFriendshipProxyListener(new TIMFriendshipProxyListener() {
@Override
public void OnAddFriends(List users) {
Log.i(tag, "OnAddFriends");
}
@Override
public void OnDelFriends(List identifiers) {
Log.i(tag, "OnDelFriends");
}
@Override
public void OnFriendProfileUpdate(List profiles) {
Log.i(tag, "OnFriendProfileUpdate");
}
@Override
public void OnAddFriendReqs(List reqs) {
Log.i(tag, "OnAddFriendReqs");
}
});
//群组管理扩展用户配置
userConfig = new TIMUserConfigGroupExt(userConfig)
//开启群组资料本地存储
.enableGroupStorage(true)
//设置群组资料变更事件监听器 监听群用户进出事件
.setGroupAssistantListener(new TIMGroupAssistantListener() {
@Override
public void onMemberJoin(String groupId, List memberInfos) {
Log.i(tag, "onMemberJoin");
Toast.makeText(context, "jin", Toast.LENGTH_SHORT).show();
if (mListener != null) {
mListener.onMemberInOrOut();
}
}
@Override
public void onMemberQuit(String groupId, List members) {
Log.i(tag, "onMemberQuit");
if (mListener != null) {
mListener.onMemberInOrOut();
}
}
@Override
public void onMemberUpdate(String groupId, List memberInfos) {
Log.i(tag, "onMemberUpdate");
}
@Override
public void onGroupAdd(TIMGroupCacheInfo groupCacheInfo) {
Log.i(tag, "onGroupAdd");
}
@Override
public void onGroupDelete(String groupId) {
Log.i(tag, "onGroupDelete");
}
@Override
public void onGroupUpdate(TIMGroupCacheInfo groupCacheInfo) {
Log.i(tag, "onGroupUpdate");
}
});
//将用户配置与通讯管理器进行绑定
TIMManager.getInstance().setUserConfig(userConfig);
//设置消息监听器,收到新消息时,通过此监听器回调
TIMManager.getInstance().addMessageListener(new TIMMessageListener() {//消息监听器
@Override
public boolean onNewMessages(List msgs) {//收到新消息
for (int i = 0; i < msgs.size(); i++) {
//解析新消息
TIMMessage msg = msgs.get(i);
for (int j = 0; j < msg.getElementCount(); ++j) {
TIMElem elem = msg.getElement(j);
//获取当前元素的类型
TIMElemType elemType = elem.getType();
Log.d(tag, "elem type: " + elemType.name());
if (elemType == TIMElemType.Text) {
//处理文本消息
TIMTextElem textElem = (TIMTextElem) elem;
String text = ((TIMTextElem) elem).getText();
String name = msg.getSenderProfile().getNickName();
Log.d(tag, "onNewMessages: ------------" + text);
if (mListener != null) {
mListener.onMessageArrived(name + ":" + text);
}
} else if (elemType == TIMElemType.Image) {
//处理图片消息
}
}
}
return true; //返回true将终止回调链,不再调用下一个新消息监听器
}
});
}
public void login() {
TIMManager.getInstance().login(你的账号, USERSIG, new TIMCallBack() {
@Override
public void onError(int code, String desc) {
//错误码 code 和错误描述 desc,可用于定位请求失败原因
//错误码 code 列表请参见错误码表
Log.d(tag, "login failed. code: " + code + " errmsg: " + desc);
}
@Override
public void onSuccess() {
Log.d(tag, "login succ");
if (mListener != null) {
mListener.loginSuccess();
}
}
});
}
public void createGroup(Context context) {
create();
}
private void create() {
//创建公开群,且不自定义群 ID
param = new TIMGroupManager.CreateGroupParam("Public", "test_group");
//指定群简介
param.setIntroduction("hello world");
//指定群公告
param.setNotification("welcome to our group");
//添加群成员
List infos = new ArrayList<>();
TIMGroupMemberInfo member = new TIMGroupMemberInfo("test_group");
member.setRoleType(TIMGroupMemberRoleType.Normal);
infos.add(member);
param.setMembers(infos);
//创建群组
mGroupManager.createGroup(param, new TIMValueCallBack() {
@Override
public void onError(int code, String desc) {
Log.d(tag, "create group failed. code: " + code + " errmsg: " + desc);
}
@Override
public void onSuccess(String s) {
mGroupId = s;
Log.d(tag, "create group succ, groupId:" + s);
if (mListener != null) {
mListener.onGroupCreate(s);
}
}
});
}
public void deleteGroup(String groupId) {
mGroupManager.deleteGroup(groupId, new TIMCallBack() {
@Override
public void onError(int code, String desc) {
Log.d(tag, "login failed. code: " + code + " errmsg: " + desc);
}
@Override
public void onSuccess() {
//解散群组成功
}
});
}
//获取群组的人数
public long getMemberNum() {
ArrayList strings = new ArrayList<>();
strings.add(mGroupId);
TIMGroupManagerExt mGroupExt = TIMGroupManagerExt.getInstance();
mGroupExt.getGroupDetailInfo(strings, new TIMValueCallBack>() {
@Override
public void onError(int i, String s) {
}
@Override
public void onSuccess(List timGroupDetailInfos) {
TIMGroupDetailInfo timGroupDetailInfo = timGroupDetailInfos.get(0);
mNumber = timGroupDetailInfo.getMemberNum();
}
});
return mNumber;
}
public void show(){
}
public void setListener(TIMListener listener) {
mListener = listener;
}
public interface TIMListener {
/**
* 当有新的文本信息到达时 回调
*/
void onMessageArrived(String text);
/**
* 当群组创建成功时 回调
*/
void onGroupCreate(String groupId);
/**
* 当有用户进出直播间时回调
*/
void onMemberInOrOut();
/**
* 登录成功时调用
*/
void loginSuccess();
}
}
需要注意的是:我这只用到群组功能,需要其他功能的请自行到腾讯云查看。
ok,就那么多,有什么问题可以留言