之前博客都删啦 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() { @Override public 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"?><Button
android:onClick="toLogin"
android:text="登录"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="OnClick" />
<Button
android:onClick="toGetUserList"
android:text="获取好友列表"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="OnClick" />
<Button
android:onClick="toSendUser"
android:text="发送添加好友"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="OnClick" />
<Button
android:onClick="toSearchUser"
android:text="搜索好友"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="OnClick" />
<Button
android:onClick="GetSendMessage"
android:text="获取好友发送信息"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="OnClick" />
<Button
android:onClick="toCreateRoom"
android:text="创建聊天室"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="OnClick" />
<androidx.recyclerview.widget.RecyclerView
android: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"?>
<TextView
android: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"?><TextView
android:id="@+id/tv_right_txt"
android:paddingLeft="5dp"
android:layout_gravity="center"
android:text="这是一条短信"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginLeft="5dp" />