基于 Android 的工具箱 APP【100011070】 您所在的位置:网站首页 链接转换短网址 基于 Android 的工具箱 APP【100011070】

基于 Android 的工具箱 APP【100011070】

2023-06-07 12:24| 来源: 网络整理| 查看: 265

基于安卓系统的破工具箱 APP 摘 要

随着互联网的快速发展和智能手机的普及,设计和开发一款多功能效率工具箱类 APP 变得迫切和可行。破工具箱 APP 是一款基于安卓平台开发的软件,首先进行系统需求分析和可行性分析,之后进行关键技术剖析及系统设计。该 APP 主要包括天气、手电筒、编码/解码、摩斯码、直尺、短网址生成、网页源码获取、随机数生成、进制转换、名片/二维码和选择困难症等功能,满足用户需求,节约用户设备空间。

关键词:工具箱;安卓;APP

二、系统分析 2.1 需求分析

破工具箱 APP 是一个多功能效率工具箱,供用户在一个 APP 内即可满足日常生活中的大部分需求,使用户可不再安装一些使用率低的工具类 APP,节约设备空间。故我们总结了普通用户较为常用的 11 个功能:

天气:实现全国所有城市七日内天气预报、空气质量及生活建议的查询;

手电筒:实现调用手机闪光灯作为手电筒及按指定频率闪烁的功能;

编码/解码:实现 BASE64、MD5、SHA1 三种编码的加(解)密;

摩斯码:实现明文内容与摩斯码之间的转(解)码;

直尺:实现屏幕尺功能;

短网址生成:实现将用户输入的合法网址转换为短网址;(7)网页源码获取:实现获取用户输入的合法网址的源代码;

随机数生成:实现显示用户给定范围内的随机数结果;

进制转换:实现 2、8、10、16 进制之间的相互转换;

名片/二维码:实现以名片格式或任意文本生成二维码功能;

选择困难症:实现在给定类别及选项内随机帮助用户选择的功能。

2.2 可行性分析

Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,

如智能手机和平板电脑。本系统选择基于安卓平台进行设计与开发,大部分手机用户都可安装并使用。

本系统界面采用 XML 语言编写,逻辑处理部分使用 Java 语言编写,具有较好的可移植性,部分功能使用和风天气、缩我短链接提供的 API 对象实现,一定程度上减少了代码量。

三、系统设计

破工具箱 APP 通过系统的模块化结构设计,按需配置功能,并预留接口便于日后

扩展。主要包括天气、手电筒、编码/解码、摩斯码、直尺、短网址生成、网页源码获取、随机数生成、进制转换、名片/二维码和选择困难症等功能。

3.1 总体功能框架图

“破工具箱”系统功能框架图如图 3-1 所示。

图 3-1 系统功能框架图

3.2 交互界面的设计和实现 3.2.1 通用部件

带返回按钮的标题栏

由于多个功能均需调用该标题栏,故布局方式采用相对布局 RelativeLayout。其中,以一个 TextView 控件,设 layout_centerInParent 属性为 true,对父布局居中显示标题内容,以一个 Button 控件,设 layout_alignParentLeft 属性为 true,对父布局左对齐显示返回按钮。

带返回按钮的标题栏实现效果如图 3-2 所示。

图 3-2 带返回按钮的标题栏实现效果

通用资源

对 APP 名等需要重复使用的资源或 APP 主题色等难以记忆的内容,将其放在单独的 XML 可扩展标记语言文件中,为其打上标签,在 name 属性为相应量命名。

以 APP 名和简介为例,如图 3-3 所示。

图 3-3 strings.xml

3.2.2 欢迎页

在 APP 启动时,欢迎页被 setContentView 方法直接调用至顶层显示,故布局方式采用相对布局 RelativeLayout。其中,以一个 ImageView 控件,设 layout_centerInParent 属性为 true,对父布局居中显示破工具箱 APP 的 Logo,以一个 TextView 控件,设 layout_alignParentBottom 属性为 true,对父布局底部对齐显示 APP 简介。

同时,欢迎页显示 2 秒后,有时长为 0.8 秒的消失动画。通过新建一个 AlphaAnimation

(透明度动画)类,其中 fromAlpha=1.0,toAlpha=0.0,表示从全不透明过渡至全透明; duration=800,表示动画持续时长为 0.8 秒。

消失动画的实现代码如图 3-4 所示。

图 3-4 消失动画实现代码

欢迎页的实现效果如图 3-5 所示。

图 3-5 欢迎页实现效果

3.2.3 主界面

欢迎页显示结束后,主界面有时长为 0.6 秒的出现动画。在 XML 文件中的 AlphaAnimation(透明度动画)属性,fromAlpha=0,toAlpha=1,表示从全透明过渡至全不透明;duration=600,表示动画持续时长=0.6 秒。

在 XML 文件中的 TranslateAnimation (平移动画)属性, fromXDelta=0 , fromYDelta=3%,表示以当前 View 的坐标(0,当前 View 的长 ×3%)作为初始点; toXDelta=0,toYDelta=0,表示以当前 View 的坐标(0,0)作为结束点进行平移。

出现动画的实现代码如图 3-6 所示。

图 3-6 出现动画实现代码

由于主界面要实现侧滑菜单的效果,故布局方式采用 DrawerLayout。其中,第一个子 View 表示内容区,布局方式采用线性布局 LinearLayout。

在内容区的线性布局 LinearLayout 中,首先使用一个相对布局 RelativeLayout 包裹着一个 ImageView 控件和一个包裹着 TextView 控件的 ScrollView 控件显示主页面上方每日一图、每日一句。使用 ScrollView 控件,是为了防止获取到的每日一句过长,无法在设定的区域内显示,故引入滚动条控件。随后使用一个线性布局 LinearLayout 包裹着一个包裹着 GridView 的 CardView 控件,以网格化的方式显示主页面的各种功能。

CardView 是 Google 自 Android 5.0 之后引入的新控件,作为一个自带圆角和阴影的卡片,能够让被包裹的内容样式更加统一。

在侧滑内容中,为了代码更加清晰易读,将 headerLayout 属性中的内容以调用独立的 dashboard_nav_header.xml 样式文件的方式,menu 属性中的内容以调用独立的 dashboard_nav_menu.xml 样式文件的方式实现。

其中 dashboard_nav_header.xml 样式文件内容为侧滑菜单顶部显示的背景图片、APP 的 Logo 以及 APP 的简介;dashboard_nav_menu.xml 样式文件内容为策划菜单的菜单项,包含了帮助与关于和退出程序两项。

侧滑菜单的实现效果如图 3-7 所示。

图 3-7 侧滑菜单实现效果

主页面的实现效果如图 3-8 所示。

图 3-8 主页面实现效果

3.2.4 天气

首次进入天气,显示省、市、区选择页面。由于信息条目较多,故布局方式采用线性布局 LinearLayout。其中,顶部标题栏与通用部件中的带返回按钮的标题栏相似,布局方式采用相对布局 RelativeLayout 。其中,以一个 TextView 控件,设 layout_centerInParent 属性为 true,对父布局居中显示标题内容,以一个 Button 控件,设 layout_alignParentLeft 属性为 true,对父布局左对齐显示返回按钮。

随后,内容部分使用 ListView 控件,以放置各省、市、自治区信息。

省、市、区选择页面的实现效果如图 3-9 所示。

图 3-9 省、市、区选择页面实现效果

天气页面有当前天气信息、天气预报、空气质量、生活建议四个 widget,故布局方式采用帧布局 FrameLayout。其中,以一个 ImageView 控件填充屏幕,作为背景图片,存放必应每日一图;同样的,天气页面要实现侧滑菜单的效果,故使用了 DrawerLayout 布局,内容区使用了一个下拉刷新布局 SwipeRefreshLayout,以实现下拉刷新天气信息的功能。该布局中包裹了一个 ScrollView 控件,控件中的线性布局 LinearLayout 囊括了标题( weather_main_title.xml ),当前天气( weather_now.xml ),天气预报

(weather_forecast.xml),空气质量(weather_aqi.xml),生活建议(weather_suggestion.xml)五个 widget。

显而易见的,策划内容调用了此前的省、市、区选择页面。

天气侧滑菜单的实现效果如图 3-10 所示。

图 3-10 天气侧滑菜单实现效果

天气页面的实现效果如图 3-11 所示。

图 3-11 天气页面实现效果

3.2.5 直尺

直尺以全屏形式显示,故布局方式采用相对布局 RelativeLayout。并定义一个

RulerView,用以在屏幕上、左两边绘制刻度。

直尺的实现效果如图 3-12 所示。

图 3-12 直尺实现效果

3.2.6 编码/解码

编码/解码布局方式采用线性布局 LinearLayout。顶部的标题栏直接调用“带返回按钮的标题栏”,标题栏下为实现三种不同编码页面切换,使用了标签布局 TabLayout 以及 ViewPager 部件,用以实现 BASE64、MD5、SHA1 三个不同的标签以及左右滑动切换当前所处标签页面。

编码/解码的实现效果如图 3-13 所示。

图 3-13 编码/解码实现效果

3.2.7 手电筒“设置频率”对话框/选择困难症“添加项目”对话框

对话框中控件较少,故采用线性布局 LinearLayout。其中,“添加项目”对话框使用文字输入布局 TextInputLayout 实现输入位置的文本框;“设置频率”对话框使用开源项目 Croller(一个圆形的 Seekbar)实现频率的选择。

“设置频率”对话框的实现效果如图 3-14 所示。

图 3-14 “设置频率”对话框实现效果

“添加项目”对话框的实现效果如图 3-15 所示。

图 3-15 “添加项目”对话框实现效果

3.2.8 名片/二维码

名片、二维码两页面均采用了协调者布局 CoordinatorLayout,用以协调子 View 产生动画效果。囊括两页面的主页面采用的是线性布局 LinearLayout,除使用 ViewPager 控件实现两功能切换外,底部的按钮导航使用 BottomNavigationView 控件实现。该控件中按钮的定义则调用单独的 qrcode_visiting_card_bottom_nav.xml 文件,其中定义了 menu 属性中的两个 item 实现。

独立菜单的实现效果如图 3-16 所示。

图 3-16 独立菜单实现效果

名片/二维码的实现效果如图 3-17 所示。

图 3-17 名片/二维码实现效果

3.2.9 关于

关于页面较为简单,故采用线性布局 LinearLayout。主要使用四个 CardView 控件实现学院信息、开发者、反馈与联系、使用的开源项目。

关于页面的实现效果如图 3-18 所示。

图 3-18 关于页面实现效果

3.2.10 其余页面

其余页面实现逻辑大体类似于上述的几个页面:采用线性布局 LinearLayout,顶部的标题栏直接调用“带返回按钮的标题栏”,主要内容使用 CardView 控件或其他控件实现。

例如,随机数生成页面的实现效果如图 3-19 所示。

图 3-19 随机数生成页面实现效果

3.3 交互逻辑的设计和实现 3.3.1 首页每日一图、每日一句

使用自己编写的 HttpUtil 类中的 sendOkHttpRequest 方法(其中用到了开源项目 OkHttp),根据当日日期生成“一个”网站的网址,形如“http://wufazhuce.com/one/xxxx”,

其中四位数字 xxxx 即代表了日期。

定义一个 Pattern 类和一个 Matcher 类,利用正则表达式的方式,对网页进行模式匹配,从而获取到“每日一句”的文本内容,存入一个 String 类;获取到“每日一图”的

图片地址,同样存入一个 String 类。下面给出每日一图、每日一句的匹配模式。

每日一图:pattern = Pattern.compile(""); 每日一句:pattern = Pattern.compile("\n" + ".+");

获取到内容和地址后,就可以将其放入主页面相应位置的 TextView 和 ImageView 中。

3.3.2 天气

天气主页面必应每日一图

与主页面来自“一个”网站的每日一图、每日一句相似的,这里同样使用了 sendOkHttpRequst 方法,同时还使用了 GuoLin 提供的 API 服务,只要在其网址后附上

“/api/bing_pic”,所返回的即为文本格式的必应每日一图地址,随后将图片放入相应的

ImageView 中即可。(2)天气信息

详细的天气信息包括了当前天气信息、天气预报、空气质量、生活建议,由于这些信息均来自和风天气的 API 服务所返回的 JSON 格式文件,我们定义了一个 Weather 类用以保存上述这些信息。

Weather 类的定义如图 3-20 所示。

图 3-20 天气类的定义

其中,Basic 类中定义了 String 类型的 cityname(城市名)和 weatherId(城市编号),

Update 类(其中定义了 String 类型的 updateTime)的 update(更新时间),如图 3-21 所示。

图 3-21 Basic 类

AQI 类中定义了 AQICity 类(其中定义了 String 类型的 aqi 和 pm25)的 city(AQI

指数及 PM2.5 信息),如图 3-22 所示。

图 3-22 AQI 类

Now 类中定义了 String 类型的 temperature(温度),More 类(其中定义了 String 类

型的 info)的 more(形如“晴”的天气描述),如图 3-23 所示。

图 3-23 Now 类

Suggestion 类中定义了 Comfort 类的 comfort(舒适度),CarWash 类的 carWash(洗车指数),Sport 类中的 sport(运动建议)。Comfort、CarWash、Sport 这三个类中均用 String 类型定义了相应的量,如图 3-24 所示。

图 3-24 Suggestion 类

Forecast 类中定义了 String 类型的 date(日期),Temperature 类(其中定义了 String

类型的 max 和 min)的 temperature(最高温、最低温),More 类(同 Now 类中的 More)的 more,如图 3-25 所示。

图 3-25 Forecast 类

在 Weather 定义 Forecast 类时,定义了一个 List,其中元素均为 Forecast,用以表示七日内天气预报。同时,在以上每个类中,都使用了“@SerializedName”方法给每个变量指定了相应 JSON 文件中的标记,从而能够更方便的解析内容。从和风天气 API 获取信息的方式与上获取图片、文字信息的方式较为相似,通过固定格式的网址和申请的个人开发者的 key,即可获取 JSON 格式的信息。

3.3.3 手电筒

手电筒的开关需要使用手机的相机权限,手电的开关通过 CameraManager 类中的 setTorchMode 方法实现,传入值 true 或 false 即可开启或关闭手机自带的闪光灯。

闪光灯按一定频率闪烁的功能主要通过读取 Seekbar 组件的进度信息,转换得到频率,建立一个闪光灯循环开关的线程,在按钮关闭前持续执行,如图 3-26 所示。

图 3-26 闪光灯闪烁进程

若该设备没有摄像头,则会启用“屏幕手电”模式,通过将屏幕亮度调至最高,实现手电的功能。

3.3.4 直尺

通过 DisplayMetrics 类中的 getDisplayMetrics 方法获取到屏幕 x 轴和 y 轴的 dpi 信息;通过 Display 类中的 getRealSize 方法获取到屏幕的 x 轴和 y 轴的像素信息,两者相除即得出屏幕尺寸(直接相除是以英寸为单位),如图 3-27 所示。

图 3-27 屏幕长宽获取

3.3.5 短网址生成/网页源码获取

短网址生成

生成短网址的过程由缩我短链接提供的 API 服务完成,我们只需要在固定格式的网址内填入需要缩短的网址以及申请的个人 key,该 API 服务就会返回文本格式的缩短后链接。

网页源码获取

与之前从指定网址获取信息方式相同,均使用了自己编写的 HttpUtil 类和 OkHttp

开源库提供的服务,除此之外,还使用了 ClipboardManager 类中的 setPrimaryClip 方法,将获取到的网页源码用 newPlainText 方法转换为 ClipData 类后,复制到系统的剪贴板。

3.3.6 名片/二维码

由于最终生成了一个二维码图片,所以该功能需要存储权限才可运行。本功能使用

到了开源库 ZXing 中的方法,首先设置二维码图片的边长、空白边距的宽度、容错级别,随后将内容编码,可视为将内容编码为一个二位的布尔数组,生成图片,存入 Bitmap 中。

3.3.7 编码/解码、摩斯码、进制转换、随机数生成、选择困难症

编码/解码

BASE64:使用 android.util 中的 Base64 类中的 encode、decode 方法实现; SHA1/MD5:使用 java.security 中的 MessageDigest 类中的 getInstance 方法实现,首先传入要编码的类型,如”SHA1”,随后使用 update 方法传入要编码的值,即可完成编码。该方法还可完成 SHA-224、SHA-256、SHA-384、SHA-512 的编码。

摩斯码

对于所有的字母、符号、数字,都有一套固定的摩斯码,仅需提前存入各字符的摩斯码,转、解码时直接使用即可。

进制转换

进制转换是非常基础的计算机相关知识,只需注意用户所选择了什么进制。

随机数生成、选择困难症

这两项功能的核心原理比较相似,均为给定上下限的随机数,仅需使用 java.util 中

的 Random 类即可完成。

四、结果展示

以下实机展示基于设备 SHARP SHV39,Android 版本 9,系统与 AOSP 相比非常接近,较为适合用作测试设备。

欢迎页如图 4-1 所示。

图 4-1 欢迎页

主页面如图 4-2 所示。

图 4-2 主页面

侧滑菜单如图 4-3 所示。

图 4-3 侧滑菜单

天气如图 4-4 所示。

图 4-4 天气

手电筒如图 4-5 所示。

图 4-5 手电筒

编码/解码如图 4-6 所示。

图 4-6 编码/解码

摩斯码如图 4-7 所示。

图 4-7 摩斯码

直尺如图 4-8 所示。

图 4-8 直尺

短网址生成如图 4-9 所示。

图 4-9 短网址生成

网页源码获取如图 4-10 所示。

图 4-10 网页源码获取

随机数生成如图 4-11 所示。

图 4-11 随机数生成

进制转换如图 4-12 所示。

图 4-12 进制转换

名片/二维码如图 4-13 所示。

图 4-13 名片/二维码

选择困难症如图 4-14 所示。

图 4-14 选择困难症

关于如图 4-15 所示。

图 4-15 关于

♻️ 资源

在这里插入图片描述

大小: 5.40MB ➡️ 资源下载:https://download.csdn.net/download/s1t16/87522299 注:如当前文章或代码侵犯了您的权益,请私信作者删除!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有