需要全部代码请点赞关注收藏后评论区留言私信~~~

手机最开始用于通话,后来增加了短信功能,初步满足了人与人之间的沟通需求。然而短信只能发文字,于是出现了能够发图片的彩信,但不管短信还是彩信,资费都太贵了,令人惜墨如金。 后来移动公司推出飞信,它支持从电脑向手机免费发短信,因而风靡一时。 到了智能机时代,更懂用户的微信异军突起,只需耗费少数流量即可发送丰富的图文消息,由此打败了短信、彩信、飞信,成为人们最常用的社交App。

一、需求描述

聊天属于微信的基础功能,包括单人聊天和多人聊天:

(1)单人聊天简称私聊,用于一对一的聊天,聊天消息只发给对方;

(2)多人聊天简称群聊,用于多对多的聊天,该群的所有成员都会收到群消息。 聊天界面既能发送文本消息,也能发送图片消息,且对方消息靠左对齐,我方消息靠右对齐。

二、功能分析

即时通信有两个意思:

(1)第一个是通信,也就是传输消息,至少支持包含文字与图片在内的图文消息;

(2)第二个是即时,也叫实时,发出来的消息要马上送到对方那里; 即时通信的特性决定了它没法采用基于短连接的HTTP协议,而必须采用基于长连接的网络协议,比如Socket、MQTT、IMPP、XMPP等等。

即时通信工具用到的技术

1)底部标签栏:用于控制切换到哪个页面。

(2)列表控件:用于展示好友列表和群聊列表。

(3)输入对话框:用于个人信息页面修改用户昵称。

(4)圆角矩形图形:用户头像采用了圆角矩形裁剪。

(5)Socket通信:聊天消息实时传给对方,需要采取Socket通信与后端服务器交互。

(6)移动数据格式JSON:聊天的图文消息要封装为JSON格式。

下面代码各模块进行简介

(1)WeLoginActivity.java:这是仿微信聊天的登录页面。

(2)WeChatActivity.java:这是登录进去后的主界面(内含三个碎片页)。

(3)FriendListFragment.java:这是好友列表的碎片页。

(4)GroupListFragment.java:这是群聊列表的碎片页。

(5)MyInfoFragment.java:这是个人信息的碎片页。

(6)FriendChatActivity.java:这是单人聊天的私聊界面。

(7)GroupChatActivity.java:这是多人聊天的群聊界面。

三、效果展示

演示视频如下

仿微信的群聊和私聊

登录界面如下 输入名字即可登录

默认已经有三个群聊 用户也可以自己创建

可以在群聊里面发送文字和图片

两人私聊的效果图 此处需要两部手机完成

群聊的效果图如下 同样需要多部手机才能完成

四、代码

部分代码如下 需要全部源码请点赞关注收藏后评论区留言私信~

package com.example.network;import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;import android.os.Bundle;
import android.view.WindowManager;
import android.widget.RadioButton;
import android.widget.RadioGroup;import com.example.network.adapter.WeChatAdapter;import io.socket.client.Socket;public class WeChatActivity extends AppCompatActivity {private ViewPager vp_content; // 声明一个翻页视图对象private RadioGroup rg_tabbar; // 声明一个单选组对象private Socket mSocket; // 声明一个套接字对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_we_chat);initView(); // 初始化视图mSocket = MainApplication.getInstance().getSocket();mSocket.connect(); // 建立Socket连接}// 初始化视图private void initView() {vp_content = findViewById(R.id.vp_content);// 构建一个翻页适配器WeChatAdapter adapter = new WeChatAdapter(getSupportFragmentManager());vp_content.setAdapter(adapter); // 设置翻页视图的适配器// 给翻页视图添加页面变更监听器vp_content.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {@Overridepublic void onPageSelected(int position) {// 选中指定位置的单选按钮rg_tabbar.check(rg_tabbar.getChildAt(position).getId());}});rg_tabbar = findViewById(R.id.rg_tabbar);// 设置单选组的选中监听器rg_tabbar.setOnCheckedChangeListener((group, checkedId) -> {for (int pos=0; pos<rg_tabbar.getChildCount(); pos++) {// 获得指定位置的单选按钮RadioButton tab = (RadioButton) rg_tabbar.getChildAt(pos);if (tab.getId() == checkedId) { // 正是当前选中的按钮vp_content.setCurrentItem(pos); // 设置翻页视图显示第几页}}});}@Overrideprotected void onDestroy() {super.onDestroy();if (mSocket.connected()) { // 已经连上Socket服务器mSocket.disconnect(); // 断开Socket连接}}}

登录界面

package com.example.network;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.EditText;
import android.widget.Toast;import com.example.network.constant.NetConst;
import com.example.network.util.SocketUtil;public class WeLoginActivity extends AppCompatActivity {private EditText et_name; // 声明一个编辑框对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_we_login);et_name = findViewById(R.id.et_name);findViewById(R.id.btn_login).setOnClickListener(v -> doLogin());// 检查能否连上Socket服务器SocketUtil.checkSocketAvailable(this, NetConst.CHAT_IP, NetConst.CHAT_PORT);}// 执行登录动作private void doLogin() {String name = et_name.getText().toString();if (TextUtils.isEmpty(name)) {Toast.makeText(this, "请输入您的微信昵称", Toast.LENGTH_SHORT).show();return;}MainApplication.getInstance().wechatName = name;// 打开聊天界面startActivity(new Intent(this, WeChatActivity.class));}
}

创作不易 觉得有帮助请点赞关注收藏~~~

【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)相关推荐

  1. 【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 与传统的影视行业相比,诞生于移动互联网时代的短视频是个全新行业,它制作方便又容易传播,一出现就成为大街小巷的时髦潮流. 各行各业的人们均可通过短视频展 ...

  2. 【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)

    需要源码请点赞关注收藏后评论区留言~~~ 一.获取地点信息 至于如何集成腾讯地图和调用腾讯地图接口此处不再赘述,有需要请参见我之前的博客 腾讯地图用来搜索POI地点的工具是TencentSearch, ...

  3. 【Android App】给三维魔方贴图以及旋转动画讲解和实战(附源码和演示视频 超详细必看)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.给三维物体贴图 除了位置坐标.颜色向量和矩阵向量,着色器还支持声明材质坐标和纹理采样器. 其中材质坐标表示物体表面摊平后的二维空间,纹理采样器表示采用 ...

  4. 【Android App】实战项目之仿微信的私信和群聊App(附源码)

    手机最开始用于通话,后来增加了短信功能,初步满足了人与人之间的沟通需求.然而短信只能发文字,于是出现了能够发图片的彩信,但不管短信还是彩信,资费都太贵了,令人惜墨如金. 后来移动公司推出飞信,它支持从 ...

  5. Android App开发实战项目之仿手机QQ动感影集动画播放(附源码和演示视频 可直接使用)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 动感影集就是只要用户添加一张图片,动感影集就能给每张图片渲染不同的动画效果,让原本静止的图片变得活泼起来,辅以各种精致的动画特效,营造一种赏心悦目的感 ...

  6. 【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.Vulkan简介 Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码 ...

  7. 【Android App】实战项目之虚拟现实(VR)的全景相册(附源码和演示视频 可用于学习和大作业)

    需要源码请点赞关注收藏后评论区留言私信~~~ 不管是绘画还是摄影,都是把三维的物体投影到平面上,其实仍旧呈现二维的模拟画面. 随着科技的发展,传统的成像手段越来越凸显出局限性,缘由在于人们需要一种更逼 ...

  8. Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 所谓抠图神器,就是从一副图片中扣出用户想要的某块区域 一.需求描述 美图的修图功能如此强大,离不开专业的图片加工技术,抠图便是其中重要的一项功能.在A ...

  9. 【Android App】勾勒出三维立方体和球体以及它们的转动图形讲解及实战(附源码和演示视频 超详细)

    需要源码或运行有问题请点赞关注收藏后评论区留言~~~ 一.轮廓勾勒 勾勒三维物体轮廓线条的步骤如下: (1)调用glEnableClientState方法启用顶点开关 (2)调用glVertexPoi ...

最新文章

  1. ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)
  2. 网站关键词排名骤降的原因及解决办法
  3. 数据中心基础运维人员的职业规划
  4. 支撑计算机高速化的半导体技术
  5. .NET Core使用微软AI认知服务识别文字语言
  6. Java 日志管理最佳实践
  7. 如何在PHP7中安装mysql的扩展
  8. 【深扒】深入理解 JavaScript 中的异步编程
  9. springboot项目java生成kml文件
  10. MongoDB同步原理解析
  11. 多多自走棋服务器不稳定,《多多自走棋》将登陆Epic平台 PC版数据将与移动版互通...
  12. centos安装nginx配置webpy
  13. waves服务器系统盘,waves服务器:Waves现场声音解决方案
  14. 物流系统管理课程(二十五)
  15. word中统一修改mathtype公式和大小对应
  16. vue 给圆遮盖物添加文字 高德地图_【高德地图开发4】---增加覆盖物setMapTextZIndex...
  17. Todesk软件使用
  18. C++Primer笔记-A003-decltype使用
  19. linux嵌入式在线升级,嵌入式Linux系统在线升级策略 Linuxers必知!
  20. 板书比赛计算机,清华老师们的板书惊艳朋友圈!8个板书技巧让黑板亮起来!...

热门文章

  1. outlook邮箱显示一直启动中_为何outlook客户端处理完服务器请求之后就一直显示正在关闭状态...
  2. 《游戏机制——高级游戏设计技术》一2.6 将突现和渐进相结合
  3. 中国移动通信集团公司
  4. 隔壁小伙的wifi密码太简单了吧
  5. HPUX 系统安全MC
  6. 双卡双待智能android,双卡双待智能Android 酷派D539正式开售
  7. android线性布局水平布局,andriod: 线性布局中的垂直于水平布局问题
  8. 我不联系你不是你不重要,而是我不知道我重不重要
  9. iOS设备利用快捷指令半自动登录Drcom校园网
  10. [资源分享] 架构的目的