基于Andriod的智能错题本APP开发
2020-02-03郑启根侯懿
郑启根 侯懿
摘 要:错题本是学生的宝贵财富,同学们建立错题本的初衷是能够有效地整理错题、适合反复翻阅、快速突破学习中的薄弱点。目前,智能手机的使用越来越普遍,本课题开发基于Android系统的手机APP智能错题本。用户可以利用手机版的智能错题本扫描自己练习册、试卷上的错题,形成错题集,录入自己的解题方法及思路,根据用户自己的掌握程度对错题进行个性化的难度分类,还可以生成试卷,供用户测试练习,相较于传统手工书写批注模式整理更方便、搜索更快捷、节约时间成本。
关键词:Andriod;APP开发;错题
中图分类号:TN99文献标识码:A
1 项目背景
在中小学生的学习成长中,会遇到各类习题的错误,在经过老师的讲解后,學生会做笔记,形成自己的错题本。错题本有助于同学们查找学习中的不足,快速突破重点难点。根据前期的中学生群体调查,在300+份有效回收的调查问卷中,842%的同学认为错题本非常重要,75.5%的同学有自己的手写错题本,经常翻看的比例是66%。主要问题反应在传统错题本记录量大,耗时费力,翻阅与查找不方便。从智能手机面世以来,各种应用程序层出不穷,教育类APP也占有其中的一席之地,有很多搜题、学习软件,已成为学生学习的好帮手。据调差显示经常使用学习类APP的学生占调查总人数的65.38%。
本着把手机用在学习上的思路,解决传统错题本耗时大检索不便的缺点,本课题针对错题的特性开发一款基于Andriod系统的智能错题集。可利用碎片化时间随时随地录入浏览,使智能手机成为真正的学习工具。
2 基于安卓系统的智能错题本设计方案
2.1 智能错题本功能需求调查结论
在课题开始阶段进行智能错题本的功能需求调查,收集手写错题本样稿。确定手机错题本开发思路为拍照录入错题及答案,用户可以自由设定几个层次的错题标签,如按题型、考察内容、难度等,便于检索和分类,用户可以在拍好的错题及答案上进行各种个性化符号的标注,如加下划线,波浪线,加★、√、、?、※等符号,可利用标签方便进行错题检索,便于回顾,机型适配基于安卓的市场常见手机品牌如华为、小米、三星、OPPO、vivo、魅族、ZET、联想、HTC等机型。
2.2 确定开发软件
开发软件选用Android Studio。其优点是启动和响应速度快,内存占用低、整合了Gradle构建工具,集合一些Ant和Maven的优点、具有强大的UI编辑器、安装的时候就自带了GitHub,CVN。其缺点是开发过程中占用开发电脑内存较大,同时升级频繁,插件复杂,但相对于一些新出现的开发平台,该开发软件稳定性好,系统BUG少,因而选定该软件作为开发平台。
数据库鉴于本次开发为单机版本,选择SQLite,其有点是方便免费,安卓平台自带的数据库,维护难度低,整个数据库存储在一个单个的文件中,数据导入导出备份恢复都是复制文件。
安全加固采用腾讯乐固使用方便,用户量大,拥有专业加固策略,目前未使用其付费项目。
2.3 智能错题本开发
2.3.1 程序简介
智能错题本用户界面如下图,以下主要分为三层:
(1)数据库存储层:使用SQLite作为数据承载载体,所有的错题的存储均放置于此层;
(2)技术支撑层:此层主要为业务层提供技术化组件的支撑,通过此层,业务层的操作可以顺利的完成。此层主要提供安全算法处理、日志处理、存储连接处理、外部网络连接等处理。纯技术化处理,不涉及到业务的处理方式;
(3)业务层:此层为核心层,用户可见层次。主要提供包含科目的分类服务、错误的管理服务、考试的服务以及其他的一些外部服务等。
智能错题本用户界面
2.3.2 程序片段举例
(1)裁剪图图片,对图片进行编辑。
public void toCropPhoto(Uri uri){
Intent intent=new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop","true");
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
intent.putExtra("outputX",1024);
intent.putExtra("outputY",1024);
intent.putExtra("scale",true);
intent.putExtra("return-data",false);
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",true);// no face detection
intent.putExtra(MediaStore.EXTRA_OUTPUT,FileIOUtil.img_uri);
acti.startActivityForResult(intent,Constant.REQ_CROP_PHOTO);