前段时间,上了两节通信课,感觉通信这东西挺高端的,于是就认真的听了两课,感觉收获还挺多的。然后老师就让我们每小组着手做自己的项目,我们小组做的是android版《小黄鸡音乐播放器》,在讨论的过程中,我们决定给音乐播放器加点新东西,于是我们就商量加入一个歌友聊天室,专门用于歌友间分享音乐心得和感受的。当时觉得这个点子挺有创意的,所以我就自告奋勇,要负责聊天功能这一部分。由于只上过几天的android和两节通信课,在做这个任务的时候吃了不少苦,不过幸好我坚持了下来,最终经过几天晚上的琢磨,终于把这个聊天室做出了点样子。接下来就给大家献丑献丑了
首先,献给大家演示一下这个聊天系统
打开软件,会出现一个欢迎界面
5秒后,会跳转至登陆界面
在文本输入框中输入服务器的ip和端口后出现聊天界面,服务器或其它客户端给该客户端发送的内容会显示在文本域左边
在文本框输入一句话,发送给服务器或客户端,在文本显示域的左边会出现一个冒泡的文本聊天框
接下来给大家讲讲上述的功能怎么实现的,
欢迎界面的实现:
我们打开很多软件都会有一个欢迎界面,这样会增强用户体验效果,具体的做法就是在一个Activity上按时间顺序分别显示两个布局文件,但是由于android是安全的,不能再线程中更改组件,所以必须调用runOnUiThread()方法来显示第二个界面,具体实现代码如下:
第一个画面
setContentView(R.layout.activity_welcome);
五秒后出现第二个画面
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
changeView();
}
}).start();
changeView()方法
private void changeView() {
runOnUiThread(new Runnable() {
@Override
public void run() {
setContentView(R.layout.login_activity);
}
}
}
输入ip和port点击进入聊天按钮,这里涉及到连上服务器及在两个Activity间传递数据和页面跳转等功能,服务器方面在这里我就不多说了。
页面的跳转及两个acyivity间传递数据,跳转是用Intent实现,专递是用系统的Bundle函数实现:
String get_Ip = ip.getText().toString();// 获取ip框内容
int get_Port = Integer.parseInt(port.getText().toString());// 获取port框内容
Bundle bundle = new Bundle();// 创建Bundl用于在activity见传递数据
bundle.putString("ip", get_Ip);// 将ip添加到bundle上
bundle.putInt("port", get_Port);// 将port添加到bundle上
intent = new Intent(WelcomeActivity.this, ChatActivity.class);// 创建intent用于activity间跳转
intent.putExtras(bundle);// 将bundle加到intent上
startActivity(intent);// 页面跳转
跳转到聊天界面后,获取登录界面中输入的ip和端口号连上服务器,代码如下:
Bundle bundle = intent.getExtras();// 获取inent
String ip = bundle.getString("ip");// 获取ip
int port = bundle.getInt("port");// 获取port
Log.i("out", "ip:" + ip + "\n" + "port" + port);
socket = new Socket(ip, port);
连上服务器后,系统发来一条消息,显示在文本域的左边,这里使用ViewAdapter来控制listView的显示:
private ListView talkView;
private ArrayList<ChatMsgEntity> list = new ArrayList<ChatMsgEntity>();
String name = getName();
String date = getDate();
String msgText = getText();
int from_him = R.layout.list_me_item;//发送消息时调用的界面
ChatMsgEntity newMessage = new ChatMsgEntity(name, date,
msgText, from_him);
list.add(newMessage);
// 调用Adapter函数
talkView.setAdapter(new ChatMsgViewAdapter(ChatActivity.this,
list));
getName(), getDate(), getText()方法
private String getName() {
return getResources().getString(R.string.app_name);
}
// shuold be redefine in the future
private String getDate() {
Calendar c = Calendar.getInstance();
String date = String.valueOf(c.get(Calendar.YEAR)) + "-"
+ String.valueOf(c.get(Calendar.MONTH)) + "-"
+ String.valueOf(c.get(Calendar.DAY_OF_MONTH)) + "-"
+ String.valueOf(c.get(Calendar.HOUR_OF_DAY)) + "-"
+ String.valueOf(c.get(Calendar.MINUTE)) + "-"
+ String.valueOf(c.get(Calendar.SECOND));
return date;
}
// shuold be redefine in the future
private String getText() {
return messageText.getText().toString();
}
按发送按钮时,发送的内容显示在文本左边
String name = getName();
String date = getDate();
String msgText = getText();
int from_him = R.layout.list_me_item;//发送消息时调用的界面
ChatMsgEntity newMessage = new ChatMsgEntity(name, date,
msgText, from_him);
list.add(newMessage);
// 调用Adapter函数
talkView.setAdapter(new ChatMsgViewAdapter(ChatActivity.this,
list));
该软件的基本功能及实现就说到这了,还有很多地方要改进,比如,加入好友列表,对特定好友发送消息,消息框写满消息后往上移等,这些功能争取在下周实现,好了,下周见!
- 描述: 欢迎界面
- 大小: 155.7 KB
- 描述: 登陆界面
- 大小: 65.4 KB
- 描述: 聊天界面
- 大小: 16.1 KB
- 描述: 发送信息
- 大小: 29.4 KB
分享到:
相关推荐
在Android平台上实现基于Socket的通信是一项重要的技术,它允许设备之间进行实时的数据交换。Socket通信是一种网络编程的基础,主要用于互联网上的双向通信。本篇将详细探讨Android如何利用Socket实现手机与电脑之间...
在Android平台上,实现基于局域网的Socket通信是一项常见的任务,尤其在开发涉及设备间通信的应用时。Socket通信允许两台设备通过网络连接直接交换数据,而无需中间服务器。在这个项目中,我们关注的是Android设备...
android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图: 这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限 2、写...
以上就是基于Socket的Android IPC通信的基本原理和实现步骤。通过这种方式,不同Android进程可以相互通信,实现复杂的功能,例如文件传输、实时消息推送等。但需要注意的是,Socket通信可能会消耗较多的系统资源,...
本文将深入探讨如何在Android中实现基于Socket的客户端和服务端通信,以构建一个简单的聊天应用。 首先,让我们理解Socket的基本概念。Socket是网络通信中的一个编程接口,它允许两台计算机通过网络进行数据交换。...
在本项目中,“Android基于Socket聊天最终版”是一个实现了基于Socket通信的简易聊天应用,它模仿了QQ的一些功能。这个项目包含三个主要部分:服务器端、客户端和数据库管理。通过Socket编程,Android设备可以作为...
在本场景中,"android基于socket两个手机之间进行通信"意味着我们需要在两台Android设备上建立TCP连接,共享局域网内的IP地址来实现数据交互。 首先,理解Socket的基本概念至关重要。Socket分为服务器端...
在Android开发中,TCP Socket通信是移动应用与服务器进行数据交互的一种常见方式。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的顺序传输和数据完整性...
Socket通信是一种基于TCP/IP协议族的网络通信方式,它允许两个网络应用程序通过网络进行数据交换。在本场景中,我们关注的是C#作为服务器端,Android作为客户端的Socket通信实现。这种通信方式常用于移动应用与后台...
总之,Android基于Socket的通信涉及到网络编程的基础知识,包括TCP/IP协议、套接字的创建、数据传输以及异常处理。熟练掌握Socket通信技术,能够为开发者构建高效、稳定的网络应用打下坚实的基础。
"Android+PC Socket通信"指的是通过TCP Socket协议实现Android设备(手机客户端)与个人计算机之间的数据传输。Socket通信允许应用程序之间建立端到端的连接,进行双向数据交换,非常适合用于实时通讯、文件传输等...
在Android开发中,Socket通信是一种常见且重要的网络通信方式,它允许设备间的双向数据传输。本资源提供的就是一套实现Android客户端与Socket服务器端通信的示例代码,包含两个文件夹,一个为Socket服务器代码,另一...
Android通过socket套接字实现网络连接,通过ip地址和ip端口实现访问服务器,从而实现客户端和服务器的连接,然后实现两者数据的互连
总结,Android中基于Socket的网络通信是通过`ServerSocket`创建服务器端,监听端口等待连接;`Socket`作为客户端,连接服务器并进行数据交换。"TestMyServerSocket"源码提供了一个基本的聊天服务器项目的实现,可以...
本示例“Android-netty和socket通信的demo”将展示如何在Android平台上利用Netty进行网络通信,与传统的Socket编程相结合,实现更加灵活和高效的通信机制。 首先,理解Netty的基本概念是非常重要的。Netty是一个...
在Android平台上实现Socket通信聊天功能,通常涉及到网络编程和Android应用开发两个主要方面。Socket通信是一种基于TCP协议的网络通信方式,它允许两台设备之间建立稳定、双向的数据传输通道。在这个“android实现...
本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 1. **Java Socket基础** Java中的`java.net.Socket`类提供了网络通信的能力,它允许我们在两个应用程序之间建立...
在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现设备间的数据交换、服务器客户端交互等场景。本实例程序主要涉及到的是Android应用如何利用Socket进行TCP(Transmission Control ...
本实例将深入探讨如何在Android应用中使用protobuf进行基于socket的通信。 首先,理解protobuf的基本原理是至关重要的。protobuf通过定义.proto文件来描述数据结构,然后使用protoc编译器生成对应语言的类文件。在...