资源:

https://download.csdn.net/download/weixin_46073307/85094573?spm=1001.2014.3001.5503

  1. 程序介绍

本实验使用android studio 平台

sdk版本信息:

程序适用Sdk32 最低22

 模拟器版本信息

我使用的模拟器为Pixel 5;Size为6.0”;Resolution为1080x2340;440dpi;使用API 32,x86_64。

功能介绍

登录界面完成第五章sql的全部内容,实现记住密码(勾选)、账号唯一、注册、登录、修改密码、注销账号、展示所有注册过的账号密码。UI设计符合第三章的课后编程实践要求,第三章其余内容在登入后的主界面均有完成。

登入后使用Fragment碎片化,通过按钮进入不同页面,使用<include标签优化布局(拼接两个布局文件)形成登入后的主界面。拥有下拉菜单,聊天界面拥有一个聊天机器人,使用图灵官网提供的api,每次进入都会以不同的话欢迎使用者 此部分还完成了课本第七章基于HTTP的网络访问(实现结果同之前每周作业里的在线课表,无法真正访问,没有实质意义上的解决)。 音乐播放器使用的是本地的mp3文件,未联网。pyq十分有趣。课本第四章广播机制和第六章多媒体体现在以上诸多功能中。

软件还拥有计算器和画图功能,计算器可以实现正常计算,与系统自带的计算器功能上无巨大区别(有上限会溢出,且因为本人水平有限无法实现使用计算结果直接进行连续计算)。画图功能可以正常使用,但是在我不断测试下发现使用清屏功能不稳定,查看代码也没发现导致有这个bug的原因(考虑将清屏功能改为重启功能以解决这一问题)。

  1. 功能实现

我在实现本次作业的时候都是先构思编写布局文件,方便明确要实现的功能然后再编写功能代码。所以在介绍功能实现部分的时候我按我完成作业的顺序进行介绍。

首先,在完成第三章作业时我就开始考虑大作业了,在我看来不管什么应用都需要有一个登录界面。

这里我应用了两个并列的横向线性布局

这里是我设置的登录标题,因为我将应用顶端自带的项目名的标题栏隐藏了,上方光秃秃的有些难看就设置了一个标题。登录界面的各个控件都设置了字号、背景色以及字体颜色。

这里是输入控件,设置好位置、id和inputType。

为了实现记住密码,直接使用checkbox

这里是部分按钮代码和最后的个人签名标识。

以下是实现登录界面功能的代码:

先使用修饰符private用来限定变量和方法仅供当前类调用(注意和控件id对应);

为实现记住密码操作这里得使用SharedPreferences文件(存入数据);

登录界面的账号信息得存入数据库中,我实现的方法为课本第五章内容SQLite数据库存储部分,使用Android提供的一个抽象类SQLiteOpenHelper,该类放在后面介绍。借助该类很方便的实现了数据库的创建和管理。

在之前的作业中我一直觉得应用顶端的带有项目名的标题栏很丑,加上原本项目名为text之前为了进行功能测试就复制了一个text(copy版本后期在这个复制版本中越写越多就没有更换。所以在这里我使用 getSupportActionBar隐藏了自带的标题栏使得我登录界面的UI设计更加美观。

得到EditText和CheckBox(输入框和勾选框)中的数据

完成创建数据库

这里我们先获得SharedPreferences对象和SharedPreferences对象的Editor对象。然后调用Editor对象的方法,向文件添加数据。定义一个boolean数据 通过查询得知当前是否记住了密码,然后如果选择的是记住密码就得向获得当前记住密码的用户登录信息。这里使用的是Cursor,这个方法是数据库(SQLite数据库中以表的形式存放内数据)中每一行的集合(这个每行的集合的意思,是获得的满足条件(就是我们query方法中传入的条件参数)的所有行。)在遍历cursor内容的时候,要先moveToFirst(),防止输出错误。到这我们就获取了记住密码时的用户登录信息。

SQLiteDatabase对象的insert()方法用于为表添加数据,参数table指定要添加记录的表的名称。参数nullColumnHack指定记录中需要赋值为null的列名,用null作为参数可表示没有列需要赋值为null。参数values包含要添加的数据。

这里是使用为数据库添加数据的方式完成注册部分,判断没有数据库时不执行添加数据操作。然后定义一个变量id记录账号,遍历cursor中的内容一旦id和cursor中存储的账号相同就使用Toast通知账号已存在。这里完成课本内容的优化,保证了账号的唯一性。如果账号不同则继续完成添加数据操作,将获取到的输入数据添加到数据表中,然后Toast通知成功添加。到这这一部分功能完成。

这三个部分分别使用了SQLiteDatabase对象的update()方法和delete()方法以及query()方法,完成了更新,删除,查询操作。之前解释过cursor作为光标它和query配合可以查询符合条件的数据库中的行的内容。这里query方法中传入的条件参数是没有条件,以此完成输出所有被注册的账号密码,以防止忘记密码(变相实现忘记/找回密码功能)。

这里定义一个函数判断用户登录信息是否正确。使用的依然是cursor方法和之前判断账号是否存在的逻辑一样。用输入的信息和数据库中已经存入的信息比对,如果账号密码全都一致则判断用户登录信息正确return true。

通过判断登录信息是否正确,如果正确则先判断是否记住密码(保存当前登录信息),如果需要记住则更新当前记住密码标志,然后使用隐式Intent启动另一个活动并通知登录成功。如果登录信息不正确则只通知用户名或密码错误。

这里是建立的SQLiteOpenHelper类,它的子类必须实现onCreate()和 OnUpgrade()两个方法。onCreate()方法在创建数据库时被调用,完成数据库的初始化操作。OnUpgrade()方法在升级数据库时被调用。到这登录界面设计的介绍就结束了。

下面是登录后的应用界面设计。成果图如下:

这里是将这个界面分为两个文件分别编写分别是top和bottom以达到分开布局的效果。

先是top文件:

设置好标题的字号、颜色以及位置

然后是下方的功能控件:

使用四个横向线性布局使排列整齐,背景色统一使看上去连在一起。这里使用图片按钮,使点击图片或文字都能打开对应的活动。

因为这里是两个布局文件,我们得将他们合并。所以这里我们创建第三个布局文件:

这里使用<include拼接两个布局文件。并在中间留出空白达到理想中的效果。到这就是登录后的界面了,下面就是按聊天、联系人、发现、我的顺序进行分模块编写介绍。这里为了实现保证top和bottom布局不变 所以使用Fragment组件使支持更加动态和灵活的UI设计(分段化页面布局)。此页面功能实现如下:

这里是对分段初始化Oncreate()实现

包括对ImageButton、LinearLayout、Fragment的初始化。

如:

首先是transaction.add(R.id.id_content,mtab0x)这里是对四个分段页面的添加(将4个页面放到Framelayout中)

下一个我们需要做的是将button与图片联系起来,因为监听是通过button来的,这个函数要实现的功能就是通过点击图片完成监听

这里添加对图片按钮和按钮的监听

由于四个页面都在fragment中,如果不隐藏会造成显示内容的重叠,因此我们的解决思路是在显示一个界面之前将所有的界面都hide,点击对应的button之后再把对应的页面显示出来,所以需要一个hide功能的函数,实现如下:

实现页面切换首先要实现对底部四个按钮的监听,当监听到点击时,进行切换页面。利用OnClickListener()实现监听,利用重写OnClick()实现点击时的操作,编写showfragment()函数实现四个页面中的切换。

这里因为我在除联系人界面都放置了其他活动,我没有实现在分段化页面中放置活动的能力,于是考虑直接通过点击这个页面的按钮进入相应的活动,然后留有一个联系人页面来在最后作业中体现分段化页面的特点。

在这个界面我设置了一个下拉菜单,调用了系统相机功能以及一个搞怪的付款功能。

StrictMode.VmPolicy.Builde

builder=new StrictMode.VmPolicy.Builder();

StrictMode.setVmPolicy(builder.build());

这里是使用严苛模式解决android7.0以上系统拍照BUG。

添加图片文件到存储卡

File sdcard =

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

然后将照片以jpg文件形式保存。

这里是支付功能的实现,这里我本来想写微信扫一扫的类似程序,在网上查询后需要用到微信官网的api经过一段时间的尝试我一直无法独立完成。我就只在这放置了一个我个人的收款码。

这里是通讯录界面,是唯一一个在运行后依然显示分段化页面的部分。

创建一个Fragment文件后仅修改了最后一部分的显示界面。即tap02。

在聊天界面我放置了一个聊天机器人。

流程:

第一步先申请机器人身份标识:

1、注册用户:访问http//wwtuling123.com/注册成为用户并创建机器人。

2、创建图灵机器人: 点击机器人管理页面中间的【创建机器人】按钮,会弹出创建机器人的页面。

3、获取apikey的值∶在机器人设置界面可以看到apikey的值,该值就是我们创建的图灵机器人对应的key的值。

这里因为我使用了博主的key值没有进行修改,然后博主的账号过期了。我没有续费重新注册账号,所以这个机器人不能真的实现对话功能。

第二步我们搭建聊天界面布局

1、创建项目:创建一个名为IntelRobot的项目,包名为com.itheimarobot。

2、导入界面图片: 将聊天界面需要的图片导入到drawable-hdpi文件夹中。

3、放置界面控件: 放置对应的控件在界面上显示。

4、创建背景选择器: 创建一个背景选择器btn_send_selector.xml。

5、修改清单文件:

去掉默认标题栏。添加允许访问网络资源的权限。

修改应用图标

整个界面最外层采用线性布局,在最外层的LinearLayout中先设置了一个TextView用来显示聊天窗口的文本为机器人。接着在TextView下面放置了一个RelativeLayout,在它里面先放置了一个ListView,用于显示聊天消息列表。然后放置了一个小的RelativeLayout,里面放置了一个Button和一个EditText,Button在EditText右侧,文本为“发送”,作为发送按钮,EditText则是聊天输入框,在里面输入聊天内容。这样整个聊天界面的布局文件就搭建好了。

如图所示:

然后是搭建聊天条目布局:

1、创建聊天列表界面的ltem:机器人聊天的Item布局文件chatting_left item.xml。以及用户聊天的tem布局文件chatting right item.xml。

2、放置界面控件: 放置对应的控件在界面上显示。

3、修改styles.xml文件:将聊天文本样式存放在stylesxml文件中。

chatting_left_item文件为机器人聊天头像和聊天框显示文件,用于显示机器人的聊天内容。主要是在RelativeLayout中放置了一个ImageView和一个TextView,ImageView为机器人的头像图片robot_head,TextView 中的 style 设置为style 文件夹中写好的格式文件chat_content_style , background选择drawable中的颜色选择器chat_left_selector。(鼠标选中消息,背景显示为深绿色,默认显示为绿色)

chatting_right_item文件为用户聊天头像和聊天框显示文件,用于显示用户的聊天内容。和机器人的聊天条目相同。主要是在RelativeLayout中放置了一个ImageView和一个TextView,ImageView 为用户的头像图片 myhead ,TextView中的 style 为style 中 chat_content_style ,background选择drawable中的颜色选择器chat_right_selector。(鼠标选中消息,背景显示为灰色,默认显示为白色)

由于机器人与用户聊天的每条消息都会有消息的状态、消息的内容等属性,因此需要创建一个ChatBean类来存放消息的这些属性。接下来,在程序中创建一个ChatBean类。

在cn.itcast.robot包中创建一个ChatBean类。在该类中创建机器人与用户聊天信息的属性。

这一步即为封装聊天信息实体类。在该类中创建机器人与用户聊天信息的属性。重写了get和set方法,消息的状态设为state,发送消息值设为1,接受消息值设为2。

由于聊天界面用了ListView控件显示聊天信息,因此需要创建一个数据适配器ChatAdapter对ListView控件进行数据适配(因为不管是接收还是发送消息都得显示)。所以要创建一个ChatAdapter类。

getView方法内用if和else语句判断当前的消息是发送的消息还是接收到的消息,不同消息加载不同的view。如果是接收消息,说明就是机器人发的消息,那就加载左边布局;如果是发送消息,说明就是用户发的消息,则加载右边布局。

下一步即是最重要的环节也就是实现智能通信

在项目的intelrobtActivity中实现聊天界面的逻辑代码,具体步骤如下:

1、添加okhttp库

由于本项目中需要用okhttp库中的OkHttpClient类向服务器请求数据,因此将okhttp库添加到项目中。

2、设置机器人的欢迎信息

机器人随机发出一些欢迎信息存放在res/values文件夹中strings.xml 文件中。

3、编写界面交互代码

在intelrobtActivity中实现智能机器人的通信功能。在intelrobtActivity中,创建了5个方法:

(1)initView( ) 用于获取界面控件并初始化界面数据;

(2)showData( ) 用于显示欢迎信息到界面上;

(3)sendData ( ) 用于用户发送信息;

(4)getDataFromServer( ) 从服务器获取机器人的回复信息:

(5)updateView( ) 更新界面信息;

最后重写onKeyDown( )方法,在该方法中实现点击后退键退出智能聊天程序的功能。

在这个活动中在本项目的实现过程中,我熟悉了网络请求、JSON解析、Handler处理等知识点。

接下来就是发现界面

这里是发现界面的布局:

朋友圈功能:

这里是布局文件。

选择图片功能,第一步检查应用是否已经获得授权。如果没有授权则使用ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},2);动态申请授权。然后使用Intent对象来打开相册

这里是处理从相册选取相片返回结果,返回图片URI或者出错。

音乐播放器,录音以及课表功能在之前的作业中均已完成不再赘述。

接下来是计算器功能:

放置计算器功能按钮并监听

这里是按键的显示效果,数字键显示相应数字,删除和清空键则显示对应效果,计算符号键显示相应符号。

显示的问题解决了,下面是计算方法部分也就是计算器功能的实现部分:

这里是正常情况(输入的两个值都不是空值)然后使用计算方法很容易编写这一段。

如果首项是空则进行以下计算,将首项视为0,这里考虑可能是因为用户进行连续计算导致的,所以在这里提醒用户不可以连续计算。

如果第二项为空,则也视为0。

Android移动应用开发 多功能平台app相关推荐

  1. Android camera相机开发拍照功能

    在Android 5.0(SDK 21)中,Google使用Camera2替代了Camera接口.Camera2在接口和架构上做了巨大的变动,但是基于众所周知的原因,我们还必须基于 Android 4 ...

  2. [源码和文档分享]基于Android实现的减肥塑身平台APP

    人们日益关注自身健康与美,好的身材更是所有人追求的目标,但塑造完美的身材塑造非易,对于体型肥胖的人来说更是难上加难.虽然目前国内有微信运动,跟我练腹肌等应用,但是这些应用缺乏个性化.论文以减肥健身为目 ...

  3. 基于Android实现的减肥塑身平台APP

    摘要 人们日益关注自身健康与美,好的身材更是所有人追求的目标,但塑造完美的身材塑造非易,对于体型肥胖的人来说更是难上加难.虽然目前国内有微信运动,跟我练腹肌等应用,但是这些应用缺乏个性化.论文以减肥健 ...

  4. Android 通过 XMPP 实现聊天功能,App Engine Assisted Group Chat (开源)

    Ureca终于把主要的功能给解决了,不管怎样,明天去见Prof. ,不管他同不同意,我都不会再做下去了.真心比较忙最近,而且哈,忙的话,真的很多事情都没法尽善尽美地完成,这不是我的风格,另外剩下主要准 ...

  5. Android系统级开发进程清理功能的一些记录和发现(一)

    Android系统级开发清理功能的一些记录和发现 客户需求做一键清理所有后台进程的功能,在查阅网上相关博客以及自己研究以后找到以下几种方法: killBackgroundProcesses() 这种方 ...

  6. Android系统级开发进程清理功能的一些记录和发现

    Android系统级开发清理功能的一些记录和发现 客户需求做一键清理所有后台进程的功能,在查阅网上相关博客以及自己研究以后找到以下几种方法: killBackgroundProcesses() 这种方 ...

  7. Android之蓝牙开发浅析

    简述: 关于蓝牙的开发,是从sdk2.0版本开始支持的,模拟器不支持,必须使用真机进行测试 android中所有半球蓝牙开发的类都在android.bluetooth包下 权限: <uses-p ...

  8. Basic4android:多功能的Android应用软件快速开发平台

    Basic4android 是目前最简单.最强大的Android平台快速应用开发工具. ( "Basic4android is the simplest and most powerful ...

  9. 智云android开发平台,智云平台app

    智云平台app是一款主打监测监控相关功能的软件.更好的帮助进行运维随时都可以进行操作,清晰的页面设计用户可以非常轻松的查找自己需要的内容,操作简单且方便,让你通过设备连接轻松获取监控机组数据,需要就赶 ...

最新文章

  1. Maven 的 Scope 区别,你知道吗?
  2. jpa关联映射(一)
  3. 数据分析方法有哪些_数据分析方法
  4. 对页面文章过长的处理方法
  5. 软件项目成员的业绩考核
  6. 文本标注工具之BRAT
  7. 2013年中国区Skyline软件价格体系
  8. d3开发Svg编辑器
  9. php pos系统,Linux下的十大开源POS系统软件
  10. Graphpad作图--百分比堆积柱形图
  11. 设计模式之访问者模式(C# / JavaScript / PHP / Java / Python 演示代码)
  12. 【Unity项目实战】手把手教学:飞翔的小鸟(2)脚本编写
  13. TorchScript简介
  14. 【camera】手机相机系统
  15. 最新-安装Windows与Ubuntu双系统
  16. 使用线性神经网络实现逻辑与和逻辑异或(一)
  17. Unity程序框架总结归置系列(3)——事件中心
  18. Cesium加载GeoJson数据(shp转化的json数据)
  19. 精仿小鸟云官网高大上模板,可做对接IDC站
  20. Leaflet使用介绍

热门文章

  1. 将 Debian APT 引入 iPhone
  2. python语言单词_python单词_python 单词_python单词书 - 云+社区 - 腾讯云
  3. 取球游戏(C++)[堆]
  4. zblog php 优化,Zblog单页面优化,Zblog后台地址修改
  5. 科研卫星服务的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. Scrapy 豆瓣搜索页爬虫
  7. 移动APP性能测试指标
  8. 智慧的车联网,是否会让我们失去操控的乐趣?
  9. 谈谈promise,谈谈微任务
  10. linux驱动学习的磕磕碰碰