极光IM简单代码(代码比较清晰)
之前博客都删啦 im是现在比较火的技术 无聊写个极光简单demo 下面直接看代码
Application.java
onCreate方法加入以下代码:
JMessageClient.init(getApplicationContext(), true);
MainActivity.java
public class MainActivity extends AppCompatActivity {
private MainActivity mContext;
private UserInfo userInfo;
/**
* 创建聊天室
/
private Conversation mConv;
/*
* 获取好友列表
*/
private List userInfoList;
private RecyclerView rv_list;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = this;login();
/**
获取某个用户信息
*/
// JMessageClient.getUserInfo(“用户名”, new GetUserInfoCallback() {
// @Override
// public void gotResult(int code, String message, UserInfo userInfo) {
// if (code == 0){
// MainActivity.this.userInfo = userInfo;
// Toast.makeText(mContext,“获取用户列表成功”,Toast.LENGTH_LONG).show();
// }else {
// Toast.makeText(mContext,“获取用户列表失败”,Toast.LENGTH_LONG).show();
// }
//
// }
// });}
/**
聊天界面
*/
private void initRv() {rv_list = findViewById(R.id.rv_list);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
rv_list.setLayoutManager(linearLayoutManager);
rv_list.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(@NonNull Rect outRect, int itemPosition, @NonNull RecyclerView parent) {
super.getItemOffsets(outRect, itemPosition, parent);
outRect.top = 10;
}
});
MessageAdapter messageAdapter = new MessageAdapter(mContext,mMsgList);
rv_list.setAdapter(messageAdapter);
// messageAdapter.notifyDataSetChanged();
}
private void init(){
/*** 单聊发送短信*/Message message = JMessageClient.createSingleTextMessage(userInfo.getUserName(), userInfo.getAppKey(), "这是一条短信");message.setOnSendCompleteCallback(new BasicCallback() {@Overridepublic void gotResult(int code, String message) {if (code == 0){Toast.makeText(mContext,"发送短信成功",Toast.LENGTH_LONG).show();}else {Toast.makeText(mContext,"发送短信失败",Toast.LENGTH_LONG).show();}}});
}
@Override
protected void onDestroy() {
super.onDestroy();
/**
* 退出极光im登录
*/
JMessageClient.logout();
}/**
- 登录im
- @param view
*/
public void toLogin(View view) {
login();
}
/**
- 登录极光im
/
private void login(){
/*im登录
*/
JMessageClient.login(“用户名”, “密码”, new BasicCallback() {
@Override
public void gotResult(int code, String message) {
if (code == 0){
Toast.makeText(mContext,“登录状态:登录成功”,Toast.LENGTH_LONG).show();
//获取当前用户信息
userInfo = JMessageClient.getMyInfo();
//创建聊天室
createRoom();
}else {
Toast.makeText(mContext,“登录状态:登录失败”,Toast.LENGTH_LONG).show();
}}
});
}
/**
- 获取好友列表
- @param view
*/
public void toGetUserList(View view) {
ContactManager.getFriendList(new GetUserInfoListCallback() {
@Override
public void gotResult(int responseCode, String responseMessage, List userInfoList) {
if (0 == responseCode) {
//获取好友列表成功
MainActivity.this.userInfoList = userInfoList;
//获取好友列表失败
Toast.makeText(mContext,“获取好友列表成功”,Toast.LENGTH_LONG).show();
} else {
//获取好友列表失败
Toast.makeText(mContext,“获取好友列表失败”,Toast.LENGTH_LONG).show();
}
}
});
}
/**
*添加- @param userName 用户名
- @param appKey appkey
- @param message 申请理由
*/
private void sendUser(String userName,String appKey,String message){
ContactManager.sendInvitationRequest(userName, appKey, message, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (0 == responseCode) {
//好友请求请求发送成功
Toast.makeText(mContext,“发送添加好友成功”,Toast.LENGTH_LONG).show();
} else {
//好友请求发送失败
Toast.makeText(mContext,“发送添加好友失败”,Toast.LENGTH_LONG).show();
}
}
});
}
public void toSendUser(View view) {
sendUser(userInfo.getUserName(),userInfo.getAppKey(),“活着2020”);
}/**
通过搜索用户名获取用户信息 然后进行添加好友
*/
private void getUserInfo(String userName){
JMessageClient.getUserInfo(userName, new GetUserInfoCallback() {
@Override
public void gotResult(int code, String message, UserInfo userInfo) {
if (code == 0){
UserInfo userData = userInfo;
Toast.makeText(mContext,“搜索好友成功”,Toast.LENGTH_LONG).show();
}else {
Toast.makeText(mContext,“搜索好友失败”,Toast.LENGTH_LONG).show();
}}
});
}
public void toSearchUser(View view) {
getUserInfo(“用户名”);
}private int mOffset = 18;
private List mMsgList = new ArrayList();//所有消息列表
/**- 获取好友发送的信息
*/
public void GetMessage(){
mMsgList = mConv.getMessagesFromNewest(0, mOffset);
switch (mMsgList.get(0).getContentType()) {
case text:
if (mMsgList != null){
initRv();
}
String text = ((TextContent) mMsgList.get(0).getContent()).getText();
//当前接收的是文本
Toast.makeText(mContext,“接收的第一条短信是” + text,Toast.LENGTH_LONG).show();
Log.e(“好友发送的信息”,mMsgList + “”);
break;
}
}
public void GetSendMessage(View view) {
GetMessage();
}/**
- 创建单聊室
- @param view
*/
public void toCreateRoom(View view) {
createRoom();
}
/**
创建单聊
/
private void createRoom(){
/*- 获取单个单聊会话
*/
mConv = JMessageClient.getSingleConversation(“好友用户名”, “appkey”);
/**
- 没有获取会话 就创建一个会话
- 创建单聊会话
/
if (mConv == null){
mConv = Conversation.createSingleConversation(“好友用户名”,“appkey”);
}
/* - 判断当前是否为单聊
*/
if (mConv.getType() == ConversationType.single){
Toast.makeText(mContext,“当前是单聊”,Toast.LENGTH_LONG).show();
}
GetMessage();
}
}
- 获取单个单聊会话
MessageAdapter.java
/**
@author Liu
@Description 聊天消息
@creat time 2021/2/7 16:12
*/
public class MessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List mMsgList;/**
- 左边聊天框
/
private final static int LEFT_VIEW_TYPE = 1;
/* - 右边聊天框
*/
private final static int RIGHT_VIEW_TYPE = 2;
private Context mContext;
public MessageAdapter (Context context,List msgList){
this.mContext = context;
this.mMsgList = msgList;}
public List getmMsgList() {
return mMsgList == null ? new ArrayList<>() : mMsgList;
}@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
/**
* 接受短信方
/
if (viewType == LEFT_VIEW_TYPE){
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_left,parent,false);
LeftViewHolder holder = new LeftViewHolder(view);//view表示子项
return holder;
}
/*
* 发送短信方
*/
else {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_right,parent,false);
RightViewHolder holder = new RightViewHolder(view);//view表示子项
return holder;
}}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof LeftViewHolder){
((LeftViewHolder) holder).tv_left_txt.setText(((TextContent) mMsgList.get(position)
.getContent()).getText());}else if (holder instanceof RightViewHolder){((RightViewHolder) holder).tv_right_txt.setText(((TextContent) mMsgList.get(position).getContent()).getText());}
}
@Override
public int getItemViewType(int position) {
/**
*
* 判断显示左边聊天框还是右边聊天框
*/
return mMsgList.get(position).getDirect() == MessageDirect.receive
? LEFT_VIEW_TYPE:RIGHT_VIEW_TYPE;
}@Override
public int getItemCount() {
return mMsgList.size();
}public class LeftViewHolder extends RecyclerView.ViewHolder{
private TextView tv_left_txt;public LeftViewHolder(@NonNull View itemView) {super(itemView);tv_left_txt = itemView.findViewById(R.id.tv_left_txt);}
}
public class RightViewHolder extends RecyclerView.ViewHolder{
private TextView tv_right_txt;public RightViewHolder(@NonNull View itemView) {super(itemView);tv_right_txt = itemView.findViewById(R.id.tv_right_txt);}
}
}- 左边聊天框
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<Buttonandroid:onClick="toLogin"android:text="登录"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toGetUserList"android:text="获取好友列表"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toSendUser"android:text="发送添加好友"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toSearchUser"android:text="搜索好友"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" />
<Buttonandroid:onClick="GetSendMessage"android:text="获取好友发送信息"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toCreateRoom"android:text="创建聊天室"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><androidx.recyclerview.widget.RecyclerViewandroid:paddingTop="20dp"android:paddingLeft="10dp"android:paddingRight="10dp"android:paddingBottom="10dp"android:id="@+id/rv_list"android:scrollbars="none"android:overScrollMode="never"android:layout_width="match_parent"android:layout_height="wrap_content"/>
item_left.xml <?xml version="1.0" encoding="utf-8"?>
<TextViewandroid:id="@+id/tv_left_txt"android:paddingLeft="5dp"android:layout_gravity="center"android:text="这是一条短信"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
item_right.xml
<?xml version="1.0" encoding="utf-8"?>
<TextViewandroid:id="@+id/tv_right_txt"android:paddingLeft="5dp"android:layout_gravity="center"android:text="这是一条短信"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
<ImageViewandroid:src="@mipmap/ic_launcher"android:layout_width="32dp"android:layout_height="32dp"android:layout_marginLeft="5dp" />
点击下载demo链接
极光IM简单代码(代码比较清晰)相关推荐
- php删除上传图片,PHP上传图片、删除图片的简单示例代码
本节内容: PHP上传图片.删除图片 1,php上传图片: 复制代码 代码示例: if (!empty($_FILES["img"]["name"])) { / ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码
大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...
- Unity 简单示例代码和向导/Unity Aplication Block
Unity 简单示例代码和向导 关于Unity 的说明和下载地址,请访问[微软控制反转和依赖注入容器Unity 1.0发布] http://forum.entlib.com/Default.aspx? ...
- 用VB6写的一个简单俄罗斯方块代码
网络上有很多俄罗斯方块代码.它们大都为了视觉效果,程序比较复杂,不利于学习游戏编程.所以我写了个简单俄罗斯方块代码,尽量用VB本身的功能,没有复杂的DirectX. 下载(注意修改下载后的扩展名) m ...
- 原生js写三级联动 java_原生js三级联动的简单实现代码
本文实例为大家分享了js查询天气应用,供大家参考,具体内容如下 实现功能:打开网页时显示用户所在城市的天气状况,在输入框输入城市可查询其它城市. 实现过程:先调用百度地图的API来获取用户所在的城市, ...
- python的代码有哪些_简单python代码类型有哪些?
简单python代码类型有哪些? 简单python代码类型有: 1.[背景] 最近,派大星想要减肥,他决定控制自己的饮食,少吃一点蟹黄堡. 海绵宝宝为了帮助好朋友派大星,和派大星一起制定了一个饮食游戏 ...
- ul、li列表简单实用代码实例
利用ul和li可以实现列表效果,下面就是一个简单的演示. 代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- webpack和react_使用React和Webpack进行简单的代码拆分
webpack和react by Didier FRANC 由Didier FRANC 使用React和Webpack进行简单的代码拆分 (Straightforward code splitting ...
- html js控制页面蒙版,JavaScript蒙板(model)功能的简单实现代码
思路: •创建一个蒙板, 设置蒙板的堆叠顺序保证能将其它元素盖住 position: absolute; top: 0; left: 0; display: none; background-colo ...
最新文章
- 蓝牙写入数据库_蓝牙 数据写入 简单易懂版(适合没写过蓝牙的看)
- 洛奇6里很喜欢的一段话!洛奇6经典台词!而是你能挨多重,并且坚持向前,你能承受多少并且坚持向前,这样才叫胜利!
- HTML5中aside标签的两种使用方法
- spss数据分析可以被人工智能替换吗
- 优秀网页设计:带给你灵感的联系页面设计
- PHP操作MongoDB GridFS 存储文件
- git for windows_手把手教会舍友玩 Git (包教包会,再也不用担心他的学习)
- 第一次学游泳技巧_游泳前,让自己不再怕水的5堂准备课
- ZooKeeper 3.5.5 基础使用
- HashMap 精讲原理篇
- hashmap containsvalue时间复杂度_恕我直言,你真的了解HashMap吗?
- javaweb项目tomcat检查不到当前模型的解决方法
- uva10098--排列
- 大雪坪剑来 Spring Cloud 教程(二):Spring Boot 集成 mybatis 实现增删改查
- (八)高德地图之添加marker标记点
- 主引导记录、启动扇区
- 使用mongoDB的一些新的(mongoDB报错解决)
- 多序列比对要多久时间_多序列比对算法探讨
- 定制自己的火狐搜索插件 searchplugins
- 自定义接口机板KU085-8ADC-3G
热门文章
- java能开发winform程序吗_Java进击C#——应用开发之WinForm环境
- 计算机论文指导记录卡,毕业论文指导记录表范文.doc
- 自制工具:CSV代码生成器:自动生成CSV文件对应的C++实体类和字段类型解析代码
- 基于Java毕业设计优课网设计与实现源码+系统+mysql+lw文档+部署软件
- 2020大一下暑期实习--funcode游戏设计
- 海思Hi3798处理器参数,Hi3798芯片详细信息介绍
- verilog 用逻辑门实现四选一数据选择器
- python实现简易动态贝叶斯网络的推断
- linux f95编译器,Fortran 95编译器是否可以编译Fortran 77代码?
- java刷票小程序,小程序投票系统刷票