Chapter 1: 应用简介

Part 1.1 背景

本应用参照了一个小众的搞怪app“Die With me”的格局,总体是一个以多人聊天室为基础的社交软件,并添加了趣味的游戏作为拓展功能。拓展的游戏参考了另一个奇葩的app“Send me to heaven”。

Part 1.2 与同类APP的对比

我们的应用总体参照“Die with me”的框架设计,但改变其对电量低于15%才能使用的要求,加入一些趣味的元素,比如进入聊天室是以不确定的电量作为标准的,并将电量不同阶段以不同颜色显示。总体上设计理念更偏向一种社交聊天的软件,支持多用户在线聊天,大家可以畅所欲言。无聊时还有趣味搞怪的游戏可以享受。

Part 1.3 运行环境

Android Studio

Chapter 2: 总体架构及功能设计

Part 2.1 总体架构

Part 2.2 聊天功能设计

整体框架

启动

  • 生成一个0-100的随机数作为电量的上限,只有电量低于这个值的人才能进入聊天室,因此可以说这个设计在原来的基础上增加了不确定性,让体验者感到趣味。整体而言电量越低,进去的概率越大,因此整体设计理念上,将电量和聊天功能更加有趣的结合。

  • 启动后将自动跳转到登陆界面:

终止

  • 当不满足电量要求时终止聊天程序。

  • 显示界面如图:

消息显示

  • 由输入的文本框,发送按钮和显示聊天内容的列表构成,聊天列表只显示昵称时间和消息内容,头像采用自动生成,以电量值为内容。如下图所示:

消息传递

  • 采用了Google的Firebase数据库工具,本APP中的登陆框架以及数据库均由其提供。在用户登陆上我们采用了邮件登陆的形式,第一次登陆的用户将会以邮箱注册。我们后台管理:

用户界面

这是目前测试已经注册的邮箱。

登陆方式

采用游戏密码形式登陆以及注册。登陆注册需要连外网。

Part 2.3 游戏功能设计

我们添加的趣味游戏,记录了根据感应器判断手机从某一点开始回到该点的时间。游戏设计上,我们以扔手机为主题,以幽默的方式,达到恶搞和抒博体验者一笑的目的。

飞行时长记录手机从开始位置移动后回到原点的时间,最高飞行记录记录了最短的时间,游戏简单却充满趣味。

Chapter 3 : 关键数据结构/算法

Part 3.1 Firebase数据库

Firebase是一个移动平台,可协助快速开发高品质的应用程序,同时Firebase也提供了庞大数据库供安卓开发使用。

首先纳入 google-services 插件和 Google 的 Maven 代码库:
http://www.biyezuopin.vip

buildscript {repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.4.1'classpath 'com.google.gms:google-services:4.3.2'}
}

在应用的 Gradle 文件中添加Firebase SDK 的依赖项和apply plugin:

implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-auth:17.0.0'
implementation 'com.google.firebase:firebase-database:17.0.0'
implementation 'com.firebaseui:firebase-ui:0.6.2'
implementation 'com.firebaseui:firebase-ui-auth:4.0.0'

给定的google-service.json文件:

Android Studio连接Firebase:

Firebase数据库权限设置:

{/* Visit https://firebase.google.com/docs/database/security to learn more aboutsecurity rules. */"rules": {".read": true,".write": true}
}http://www.biyezuopin.vip

代码中Firebase相关变量的定义和调用代码:数据库:

private FirebaseDatabase database;
private DatabaseReference myRef;database = FirebaseDatabase.getInstance();
myRef = database.getReference("fir-ec425");//指定数据库下的参考条目

身份验证:

if (FirebaseAuth.getInstance().getCurrentUser() == null) {startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().build(),SIGN_IN_REQUEST_CODE);} else {Toast.makeText(this, getString(R.string.welcome_sign) +FirebaseAuth.getInstance().getCurrentUser().getDisplayName(),Toast.LENGTH_LONG).show();
}

读数据库数据:

myRef.addChildEventListener(new ChildEventListener()
{@Overridepublic void onChildAdded(DataSnapshot dataSnapshot, String s) {i = dataSnapshot.getChildren().iterator();while (i.hasNext()) {nameReceivedFromFirebase = ((DataSnapshot)i.next()).getValue().toString();messageReceiverFromFirebase = ((DataSnapshot)i.next()).getValue().toString();timeReceivedFromFirebase = ((DataSnapshot)i.next()).getValue().toString();batterReceivedFromFirebase = ((DataSnapshot)i.next()).getValue().toString();}receivedMessagesFromFirebase = new ConstructorMessages(nameReceivedFromFirebase, messageReceiverFromFirebase,timeReceivedFromFirebase, batterReceivedFromFirebase);constructorMessages.add(receivedMessagesFromFirebase);dataAdapter.notifyDataSetChanged();messagesRecycler.smoothScrollToPosition(constructorMessages.size());
}
```http://www.biyezuopin.vip写入数据库:```java
myRef.push().setValue(new ConstructorMessages(constructorPushedMessage.getAuthors(),constructorPushedMessage.getMessages(),constructorPushedMessage.getTimes(),constructorPushedMessage.getBatteryLevel()
));

Part 3.2 手机电量交互

该款APP主要设计理念在于获取手机电量并随机设置许可进入电量以形成随机控制人员进入的功能。

当手机电量发生改变时,系统会对外发送Intent的Action 为ACTION_BATTERY_CHANGED常量广播。当手机电量过低时,系统会发送Intent的Action为ACTION_BATTERY_LOW常量的广播。所以可以通过开发监听对应的Itent的

BroadcastReceiver:

intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
batteryStatus = registerReceiver(null, intentFilter);
battery = batteryStatus.getIntExtra("level", -1);

同时,根据手机电量变化也设计了相关电量颜色变化显示:

private void setBatteryInToolbar() {runOnUiThread(new Runnable() {@Overridepublic void run() {batteryInToolbar.setText(battery + "%");if(battery <= 100 && battery > 90) batteryInToolbar.setTextColor(Color.parseColor("#009688"));if(battery <= 90 && battery > 80) batteryInToolbar.setTextColor(Color.parseColor("#4CAF50"));if(battery <= 80 && battery > 70) batteryInToolbar.setTextColor(Color.parseColor("#8BC34A"));if(battery <= 70 && battery > 60) batteryInToolbar.setTextColor(Color.parseColor("#CDDC39"));if(battery <= 60 && battery > 50) batteryInToolbar.setTextColor(Color.parseColor("#FFEB3B"));if(battery <= 50 && battery > 40) batteryInToolbar.setTextColor(Color.parseColor("#FFC107"));if(battery <= 40 && battery > 30) batteryInToolbar.setTextColor(Color.parseColor("#FF9800"));if(battery <= 30 && battery > 20) batteryInToolbar.setTextColor(Color.parseColor("#FF5722"));if(battery <= 20 && battery > 10) batteryInToolbar.setTextColor(Color.parseColor("#FFFFFF"));if(battery == 10) batteryInToolbar.setTextColor(Color.parseColor("#FFFFFF"));if(battery == 9) batteryInToolbar.setTextColor(Color.parseColor("#EBEBEB"));if(battery == 8)batteryInToolbar.setTextColor(Color.parseColor("#D5D5D5"));if(battery == 7)batteryInToolbar.setTextColor(Color.parseColor("#BEBEBE"));if(battery == 6)batteryInToolbar.setTextColor(Color.parseColor("#A5A5A5"));if(battery == 5)batteryInToolbar.setTextColor(Color.parseColor("#8B8B8B"));if(battery == 4)batteryInToolbar.setTextColor(Color.parseColor("#727272"));if(battery == 3)batteryInToolbar.setTextColor(Color.parseColor("#535353"));if(battery == 2)batteryInToolbar.setTextColor(Color.parseColor("#383838"));if(battery == 1)batteryInToolbar.setTextColor(Color.parseColor("#202020"));if(battery == 0)batteryInToolbar.setTextColor(Color.parseColor("#000000"));}});
}

Part 3.3 Hardware.Sensor

Android平台支持一些用于监视设备动作的传感器以便于更好的安卓开发设计,该APP游戏界面设计中主要使用了加速传感器( TYPE_ACCELEROMETER)来计算手机加速度的变化以得到手机在空中飞行的时长:

//Retrieve SensorManager, Android's tool for manipulating phone sensors
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //Set SensorManager to retrieve accelerometer data
accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //Register this Activity as a listener for changes in phone acceleration detected by the accelerometer
sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL);

Chapter 4 : 开发困难及解决方案

困难

连接Firebase时对于采用的功能以及对应的gradle依赖和依赖的版本都不是很了解,采用不同版本的依赖会出现错误。

解决方案

将firebase相关的依赖都与tool内与firebase连接后自带配置的依赖版本一致。

//implementation 'com.google.firebase:firebase-analytics:17.0.0'
implementation 'com.google.firebase:firebase-auth:17.0.0'
implementation 'com.google.firebase:firebase-database:17.0.0' 部分依赖采用Firebase给定Json配置时给出的依赖项:

一些依赖参考网络上类似Firebase代码的相关配置,探索版本:

implementation 'com.google.firebase:firebase-core:17.2.1'

未解决的问题

数据库达到一定容量,及消息达到一定数量时,会导致程序闪退问题,需要清理数据库才能解决。但实际监听数据库的流量,并未达到Firebase提供的数据库容量上限,因此尚未明确该问题的根本原因。

Chapter 5 : 总结

该款APP小程序主要设计理念是概念性轻聊天软件,聊天室以手机电量为主要用户信息,通过邮箱注册登入聊天室,实现不同安卓终端设备之间的同步聊天和聊天记录更新。同时在界面设计上融入了电量颜色变化警示。在功能上实现了基本的用户登入登出,发送消息和同步接收,以及聊天室配备的小游戏。基本上身为一个聊天软件,功能齐全,富有新意和创意。

这款APP可以改进的功能还有很多,例如:

  • 聊天室仅限于文字聊天和相关emoji表情包,由于Firebase上申请的数据库容量过小,难以实现语音和图片的传输,后续改进可以考虑扩充数据库的大小,增添语音和图片的传输功能
  • 在推送提醒上,概念型的简易版聊天室缺少像QQ、微信等社交软件的消息推送功能,实用性不是特别强
  • 聊天室小游戏设计方面,由于需要获取手机运行加速度,只有在手机回归源抛出起始点时才可计算抛出的时间,满足测试的手机轨迹必须为垂直自由落体,不是很人性化

总之,作为聊天APP总体基础功能基本上实现了,界面美观大方,UI交互非常边界流畅,加载速度较快,总体来说实现的APP功能比较完善,也学到了很多知识,收获颇丰。

扯淡搞怪聊天室APP设计相关推荐

  1. 基于Python的多人聊天室的设计与实现

    基于Python的多人聊天室的设计与实现 摘要  本文介绍了基于即时通讯的Python实现web版多人聊天室的设计和实现.这个系统利用了多种先进的技术,如Django.Channels.WebSock ...

  2. 聊聊语音聊天室app源码实时音视频中的技术难点:回声消除+噪声消除

    聊聊语音聊天室app源码实时音视频中的技术难点:回声消除+噪声消除 在聊聊语音聊天室app源码各个实时音视频互动场景中,回声和噪声对于影响用户体验而言都是很大的问题.音视频正在发展成为互联网线上沟通的 ...

  3. java web聊天室论文_基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述(样例3)...

    <基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc>由会员分享,可免费在线阅读全文,更多与<基于Java网页版聊天室的设计与实现毕业论文含开题报告及文献综述& ...

  4. html制作类似qq聊天室,QQ聊天室主页设计

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考.  无标题页 .style2 { font-family: 华文新魏; text-alig ...

  5. java web聊天室论文_基于java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc...

    基于java网页版聊天室的设计与实现毕业论文含开题报告及文献综述.doc 还剩 52页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价 ...

  6. 局域网聊天室课程设计

    九月份到了,眨眼间我就是大三的老学长了.玩耍了一个暑假,说实话还真的有一点点的不想上学呢!一上学来,就是一个课程设计.然而我写的题目是局域网聊天室课程设计.要求我们四天完成,我的妈妈呀,这咋可能.这不 ...

  7. 基于linux网络聊天室的设计,参考基于linux网络聊天室的设计.doc

    参考基于linux网络聊天室的设计 长沙理工大学<高级操作系统>课程设计报告学 院 计算机与通信工程 专 业 计算机科学与技术 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 课程 ...

  8. java web聊天室论文_基于Java网页版聊天室的设计与实现毕业论文含开报告及文献综述.doc...

    基于Java网页版聊天室的设计与实现毕业论文含开报告及文献综述 本科生毕业论文(设计) 题 目: 基于Java网页版聊天室的设计与实现 姓 名:学 院: 理学院 专 业: 信息与计算科学 班 级: 信 ...

  9. php聊天室的设计实现,基于PHP的Ajax聊天室系统的设计与实现

    第7卷 第20期 2007年10月167121819(2007)2025396204 科 学 技 术 与 工 程 Science Technol ogy and Engineering Vol .7 ...

最新文章

  1. 怎样使破解网页的禁止复制黏贴
  2. 异步执行和多线程编程的关系
  3. zepto中的tap穿透
  4. 单片机小白学步系列(十) 单片机程序下载相关知识
  5. iOS绘圆形图-CGContextAddArc各参数说明
  6. Ubuntu 16.04 搭建Android开发环境
  7. Java微服务之Spring Boot on Docker,java开发面试笔试题
  8. 《linux核心应用命令速查》连载三:sa:报告、清理并维护进程统计文件
  9. vue3+vant Failed to resolve import “E:/code3/jianmu-user-yd/node_modules/vant/lib/vant/es/icon/style
  10. 外贸工具WhatsApp
  11. cesium添加填充_项目中的一个关于cesium的边界线的问题
  12. 盒子鱼 android4.2.2,BOXFiSH盒子鱼家长
  13. 局域网内2台ubuntu电脑共享鼠标键盘
  14. 纯JS写的小众游戏——走四棋
  15. 1.8 Illustrator标尺的使用 [Illustrator CC教程]
  16. 高位字节与低位字节简单介绍
  17. Convex Optimization-chapter1
  18. pom 备注_POMGH-25POMGH-25
  19. 英特尔将继续开发MeeGo系统 年底推新版本
  20. Matlab缩放曲线局部窗口

热门文章

  1. python开头声明_python开头——文件声明 详解
  2. 地表最强三巨头【康惠保2.0】、【超级玛丽3号Max】、【达尔文3号】大PK!
  3. SpringBoot的controller为什么不能并行执行?同一个浏览器连续多次访问同一个url竟然是串行的?- 第329篇
  4. 国内有哪些比较靠谱的云服务器?
  5. 数据预处理-缺失值处理
  6. BGA焊接工艺及可靠性分析
  7. ETL工程师主要工作内容
  8. SQL中NVL()用法
  9. 在Outlook2007中设置QQ邮箱为IMAP/SMTP服务器
  10. HtmlCss光标(插入符caret)透明隐藏光标 221106笔记