收藏 分享(赏)

Android开发(智能备忘录系统).doc

上传人:精品资料 文档编号:8243331 上传时间:2019-06-16 格式:DOC 页数:41 大小:572KB
下载 相关 举报
Android开发(智能备忘录系统).doc_第1页
第1页 / 共41页
Android开发(智能备忘录系统).doc_第2页
第2页 / 共41页
Android开发(智能备忘录系统).doc_第3页
第3页 / 共41页
Android开发(智能备忘录系统).doc_第4页
第4页 / 共41页
Android开发(智能备忘录系统).doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、1*大学智能终端开发课程设计说明书课题名称:姓 名:学 号:专 业:班 级:指导教师:2014 年 12 月 25日2目 录第一章 概 述-第二章 需求分析- 2.1 系统主要内容- 2.2 基本要求- 2.3设计需要结合使用的技术-2.4模块的功能性概述-第三章 概要设计- 3.1 系统的功能结构- 3.2 系统的模块结构- 3.3 各模块的活动图- 第四章 详细设计- 4.1 布局文件- 4.2 备忘录数据存储的实现-4.3 备忘录的列表展示- 4.4 备忘录的维护-4.5 备忘录的定时提醒-第 5 章 调试分析- 第六章 设计总结- 第七章 参考文献- 第八章 附录- 3第一章 概述对

2、于 很 多 人 来 说 , 随 时 带 个 小 本 子 记 录 一 些 事 情 是 很 有 必 要的 事 情 , 从 而 出 现 了 备 忘 录 。 有 了 备 忘 录 , 可 以 将 自 己 的 工 作 和生 活 安 排 的 更 有 条 理 , 在 有 限 的 时 间 内 完 成 最 重 要 、 最 紧 急 的 事情 。 随着智能手机逐渐走进普通人的生活,它正在成为人们获取信息的主要设备,而且智能手机是他们获取信息最方便、最快捷的途径。因此,对 于 所 有 拥 有 的 手 机 的 用 户 来 说 , 可 以 随 时 随 地 便 捷 的通 过 手 机 备 忘 录 来 实 现 重 要 事 情 的

3、 记 录 与 提 醒 , 省 去 了 随 身 携 带纸 笔 的 麻 烦 。 现 如 今 搭 载 Android 系 统 平 台 的 手 机 已 占 有 超 过 70%的市 场 份 额 , 所 以 , 在 Android 系统下的备忘录软件中,用户可以非常方便的查询事件备忘,为工作、出游、生活杂碎事提供整理记录功能。开 发 一 款 能 在 Android 系 统 上 使 用 , 且 性 能 卓 越 的 备 忘 录是 非 常 有 必 要 且 前 途 光 明 。4第 二 章 需 求 分 析2.1、系统主要内容: (1) 、基于 Android 系统平台研发出备忘录; (2) 、通过安装备忘录,防止手

4、机用户遗忘某个时间的重要工作,进行记录并在特定时间通过声音,文字或振动提醒用户; (3) 、主要模块有:备忘录数据存储、列表浏览、数据维护和定时提醒等模块。 2.2、基本要求:(1) 、基于 Android 系统平台研发出备忘录,以防止手机用户遗忘某个时间的重要工作,进行记录并在特定时间通过声音,文字或振动提醒用户。 (2) 、主要设计出备忘录数据存储、列表浏览、数据维护和定时提醒等模块。已学习掌握Android系统平台和Java编程技术,并要求软件界面简洁专业,功能完善,真正为用户提供重要工作备忘功能。2.3、设计需要结合使用的技术:(1)、Eclipse平台:Eclipse 是一个运行插件

5、的平台。可以下载安装 Eclipse Classic 的最新版本。(2)、 Android Developer Tools:按照安装说明安装 Android Developer Tools(Eclipse 插件)。2.4、模块的功能性概述:(1) 、备忘录数据存储实现:备忘录的最重要功能就是记录和保存用户容易遗忘的日期和事件,为了持久地将用户的备忘录信息保存下来,需要将这些信息存储在数据库中。备忘录需要保存的信息有:编号(ID) 、提醒日期(Date1)、提醒时间(Time1)、提醒内容(Content)、是否启用(ON_OFF)、是否声音提醒(ALARM)、创建时间(CREATED)等.(2

6、) 、备忘录列表展示:用户可能需要创建很多条备忘录信息,并且需要维护这些备忘录信息,例如删除、修改等功能。备忘录的列表展示能使用户界面更加简洁清晰,并带给用户使用方便(3) 、备忘录维护:备忘录维护是该应用程序的核心部分,提供了添加、修改、删除备忘录信息的功能,提供备忘录动态更新的功能。(4) 、备忘录定时提醒:备忘录的第一需求是能够有效提醒用户置办已记录的事件,从而达到真正5避免遗忘的效果,为了更好的提醒用户在特定时间做某项工作,要设置语音和震动等功能。第 三 章 概 要 设 计3.1、 系 统 的 功 能 结 构 :开始设置是否开启设置日期时间备忘录内容结束开启闹钟3.2、 系 统 的 模

7、 块 结 构 :63.3、 各 模 块 的 活 动 图 :3.3.1、 添 加 备 忘 录添 加 日 期 、 时 间 、 闹 铃 :7添 加 内 容 :83.3.2、 查 看 备 忘 录3.3.3 修 改 备 忘 录修 改 日 期 、 时 间 、 闹 铃 :9修 改 内 容 :3.3.4 删 除 备 忘 录10第 四 章 详 细 设 计4.1、 布 局 文 件 main.xmlfill_parent:使视图元素占满可用的空间。也可以认为这就是 “拉伸”。4.2、备忘录数据存储的实现为了使备忘录数据表具有通用的数据共享访问机制,需要通过ContentProvider 来实现。这里定义一个 Tas

8、kListProvider 类,该类继承ContentProvider,实现了onCreat、query、getType、insert、delete、update 等方法,来支持数据的增、删、查、改等操作。在该类内部还定义了一个 DatabaseHelper 内部类继承SQLiteHelper,该类提供了常见或打开数据库、创建或删除表的功能。114.3、 备 忘 录 的 列 表 展 示 :这里通过一个 ListActivity 来展示备忘录列表,通过选项菜单提供维护数据接口。4.4、 备 忘 录 的 维 护 :当用户单击主界面的一个列表时会在上述列表展示中提到的setOnItemClickLi

9、stener 方法中响应,此方法体中定义一个 Intent 对象,使用 setClass 方法实现界面跳转到此 TaskDetailActivity 所对应的界面124.5、备忘录的定时提醒:此功能通过定义 Activity 发出广播,BroadcastReceiver 接收广播,并通过 Notification 提醒用户。4.5.1 定义提醒广播接收器当用户选择了备忘录信息中的“开启闹钟”选项时,便通过广播的方式启动一个定时闹钟,之后定义一个广播接收器接收广播。134.5.2 广播接收器实现如下4.5.3 显示提醒 Activity:14第 五 章 调 试 分 析程 序 运 行 :列 表 展

10、 示 :15备 忘 录 维 护 :16备 忘 录 定 时 提 醒 :总 体 来 说 , 调 试 过 程 中 基 本 没 有 出 现 系 统 性 错 误 , 软 件 健 壮性 良 好 , 测 试 数 据 随 机 采 用 , 基 本 实 现 软 件 要 实 现 的 需 求 。17第 六 章 设 计 总 结经过一个多月的学习和研究,本次课程设计终于圆满完成,虽然耗费了许多精力和时间,设计过程中也出现了许多问题,但通过网上资料的查询、图书馆图书的借阅以及同学们的帮助,最终也逐一得到了解决。通过本次课程设计,我了解到实践经验对于学生的重要性。备忘录软件的开发使我对书本上的知识点和理论有了更深一层的了解,

11、使我学会了如何利用所学的知识,把理论结合于实践中,进一步掌握了开发基于 Android 平台的软件的流程。本次课程设计主要研究了 Android 平台的架构以及在 Android 平台上开发备忘录软件,此应用除了具备简单备忘功能外,还具备简单数据处理功能以及闹钟提醒相对高级点的功能。本次课程设计在 Android 平台以及在该平台上开发手机备忘录软件上做了大量的工作,但仍有许多地方值得进一步探讨研究,如:界面设计如何更加美观简洁,软件的移植性、兼容性如何等。Android 开发是一个开放的平台,需要不断进行内容添加和补充,这也就要求我们学生不断学习新知识,从而使软件功能不断扩展。同时,本次课程

12、设计让我对智能终端开发这门课程有了更深层次的了解,也让我发现了自我存在的不足,今后,在 Android 开发的学习之路上,我必须更加重视实践与理论的结合,在系统的扩展性方面花费更多的精力去学习。第 七 章 参 考 文 献【1】 零点起飞学 Android 开发徐诚 著,清华大学出版社2Android 基础教程 (美)伯内特 著,张波 等译/2009 年11 月/人民邮电出版社3Android 应用程序开发,王向辉,张国印,沈洁 编著/2010 年3 月/清华大学出版社4Java 宝典 ,孙浏毅 等编著/2009 年 8 月/电子工业大学出版社5XML 程序设计使用教程 ,张亚飞,汤桂风 编著/

13、2010 年 8 月/北京师范大学出版社6Java 编程思想(美)Bruce Eckel 著,陈昊鹏 译/2011 年 4 月/机械工业出版社7Android 程序设计基础郝玉龙/2011 年 1 月/清华大学出版社18第 八 章 附 录(1) AlarmActivity.java 文件package com.amaker.ch17.app;import android.app.*;import android.content.Context;import .Uri;import android.os.Bundle;import android.view.View;import android

14、.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class AlarmActivity extends Activity public static final int ID = 1;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.alarm);/ 获得 Button、TextView

15、实例Button btn = (Button) findViewById(R.id.cancelButton01);TextView tv = (TextView)findViewById(R.id.msgTextView01);/获得 NotificationManager 实例String service = Context.NOTIFICATION_SERVICE; final NotificationManager nm =(NotificationManager)getSystemService(service);/ 实例化 NotificationNotification n =

16、new Notification();/ 设置显示提示信息,该信息也会在状态栏显示String msg = getIntent().getStringExtra(“msg“);n.tickerText = msg;/ 显示时间tv.setText(msg);/ 设置声音提示n.sound = Uri.parse(“file:/sdcard/fallbackring.ogg“);nm.notify(ID, n);/ 发出通知/ 取消通知btn.setOnClickListener(new OnClickListener() 19public void onClick(View v) nm.can

17、cel(ID);finish(););(2)TaskDetailActivity.java 文件package com.amaker.ch17.app;import java.util.Calendar;import android.app.*;import android.content.*;import .Uri;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.*;i

18、mport com.amaker.ch17.app.TaskList.Tasks;public class TaskDetailActivity extends ListActivity / 备忘录信息列表private ListView listView = null;private int mYear;/ 提醒日期private int mMonth;private int mDay;private int mHour;/ 提醒时间private int mMinute;/ 日期显示 TextViewprivate TextView dateName, dateDesc;/ 时间显示 Te

19、xtViewprivate TextView timeName, timeDesc;/ 提醒内容 TextViewprivate TextView contentName, contentDesc;private int on_off = 0;/ 是否开启提醒20private int alarm = 0;/ 是否声音警告/ 显示日期、时间对话框常量static final int DATE_DIALOG_ID = 0;static final int TIME_DIALOG_ID = 1;/ 保存内容、日期、时间字符串private String content, date1, time1;

20、private int id1;/ 备忘录 IDprivate CheckedTextView ctv1, ctv2;/ 多选框private LayoutInflater li;/ 访问布局实例/ 初始化方法private void init(Intent intent) Bundle b = intent.getBundleExtra(“b“);if (b != null) id1 = b.getInt(“id“);content = b.getString(“content“);date1 = b.getString(“date1“);time1 = b.getString(“time1

21、“);on_off = b.getInt(“on_off“);alarm = b.getInt(“alarm“);if (date1 != null mYear = Integer.parseInt(strs0);mMonth = Integer.parseInt(strs1);mDay = Integer.parseInt(strs2);if (time1 != null mHour = Integer.parseInt(strs0);mMinute = Integer.parseInt(strs1);public void onCreate(Bundle savedInstanceStat

22、e) super.onCreate(savedInstanceState);21/ 获得 ListViewlistView = getListView();/ 实例化 LayoutInflaterli = getLayoutInflater();/ 设置 ListView Adapter listView.setAdapter(new ViewAdapter();/ 可多选listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);/ 获得 Calendar 实例final Calendar c = Calendar.getInstance();

23、/ 获得当前日期、时间mYear = c.get(Calendar.YEAR);mMonth = c.get(Calendar.MONTH);mDay = c.get(Calendar.DAY_OF_MONTH);mHour = c.get(Calendar.HOUR_OF_DAY);mMinute = c.get(Calendar.MINUTE);/ 响应列表单击事件listView.setOnItemClickListener(new OnItemClickListener() public void onItemClick(AdapterView av, View v, intposit

24、ion,long id) switch (position) / 设置是否开启提醒case 0:ctv1 = (CheckedTextView) v;if (ctv1.isChecked() on_off = 0; else on_off = 1;break;/ 设置提醒日期case 1:showDialog(DATE_DIALOG_ID);22break;/ 设置提醒时间case 2:showDialog(TIME_DIALOG_ID);break;/ 设置提醒内容case 3:showDialog1(“请输入内容:“);break;/ 设置是否开启语音提醒case 4:ctv2 = (Ch

25、eckedTextView) v;if (ctv2.isChecked() alarm = 0;setAlarm(false); else alarm = 1;setAlarm(true);break;default:break;);protected void onResume() super.onResume();/ 初始化列表init(getIntent();/ ListView Adatper,该类实现了列表的每一项通过自定义视图实现class ViewAdapter extends BaseAdapter / 列表显示内容23String strs = “是否开启“,“日期“,“时间

26、“,“内容“,“开启闹钟“ ;/ 获得列表列数public int getCount() return strs.length;/ 返回列表项public Object getItem(int position) return position;/ 返回列表 IDpublic long getItemId(int position) return position;/ 获得当前列表项视图public View getView(int position,View convertView,ViewGroup parent) View v = li.inflate(R.layout.item_row

27、, null);switch (position) / 是否开启该条备忘录case 0:ctv1 = (CheckedTextView) li.inflate(android.R.layout.simple_list_item_multiple_choice, null);ctv1.setText(strsposition);if (on_off = 0) ctv1.setChecked(false); else ctv1.setChecked(true);return ctv1;/ 提醒日期case 1:dateName = (TextView)v.findViewById(R.id.nam

28、e);dateDesc = (TextView) v.findViewById(R.id.desc);dateName.setText(strsposition);dateDesc.setText(mYear + “/“ + mMonth + “/“ + mDay);return v;/ 提醒时间24case 2:timeName = (TextView) v.findViewById(R.id.name);timeDesc = (TextView) v.findViewById(R.id.desc);timeName.setText(strsposition);timeDesc.setTex

29、t(mHour + “:“ + mMinute);return v;/ 提醒内容case 3:contentName = (TextView) v.findViewById(R.id.name);contentDesc = (TextView) v.findViewById(R.id.desc);contentName.setText(strsposition)contentDesc.setText(content);return v;/ 是否声音提示case 4:ctv2 = (CheckedTextView)li.inflate(android.R.layout.simple_list_i

30、tem_multiple_choice, null); ctv2.setText(strsposition);if (alarm = 0) ctv2.setChecked(false); else ctv2.setChecked(true);return ctv2;default:break;return null;/ 显示对话框protected Dialog onCreateDialog(int id) switch (id) / 显示日期对话框25case DATE_DIALOG_ID:return new DatePickerDialog(this, mDateSetListener,

31、 mYear, mMonth, mDay);/ 显示时间对话框case TIME_DIALOG_ID:return new TimePickerDialog(this,mTimeSetListener, mHour, mMinute, false);return null;final String BC_ACTION = “com.amaker.ch17.TaskReceiver“;/ 设置通知提示private void setAlarm(boolean flag) / 获得 AlarmManager 实例final AlarmManager am = (AlarmManager) getS

32、ystemService(ALARM_SERVICE);/ 实例化 IntentIntent intent = new Intent();/ 设置 Intent action 属性intent.setAction(BC_ACTION);intent.putExtra(“msg“, content);/ 实例化 PendingIntentfinal PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);/ 获得系统时间final long time1 =System.current

33、TimeMillis();Calendar c = Calendar.getInstance();c.set(mYear, mMonth, mDay, mHour, mMinute);long time2 = c.getTimeInMillis();if (flagelseam.cancel(pi);26/设置提示日期对话框private void showDialog1(String msg) View v = li.inflate(R.layout.item_content, null);final EditText contentET = (EditText) v.findViewByI

34、d(R.id.content);contentET.setText(content);new AlertDialog.Builder(this).setView(v).setMessage(msg).setCancelable(false).setPositiveButton(“确定“,new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int id) content = contentET.getText().toString();contentDesc.setText(conte

35、nt);).show();/ 时间选择对话框private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() public void onTimeSet(TimePicker view, int hourOfDay, int minute) mHour = hourOfDay;mMinute = minute;timeDesc.setText(mHour + “:“ + mMinute);/ 日期选择对话框private DatePickerDialog.

36、OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) mYear = year;mMonth = monthOfYear;mDay = dayOfMonth;27dateDesc.setText(mYear + “/“ + mMonth + “/“ + mDay);/ 保存或修改备忘录信息protected void onPause(

37、) super.onPause();saveOrUpdate();/ 保存或修改备忘录信息private void saveOrUpdate() ContentValues values = new ContentValues();values.clear();values.put(Tasks.CONTENT, contentDesc.getText().toString();values.put(Tasks.DATE1, dateDesc.getText().toString();values.put(Tasks.TIME1, timeDesc.getText().toString();va

38、lues.put(Tasks.ON_OFF, ctv1.isChecked() ? 1 : 0);values.put(Tasks.ALARM, ctv2.isChecked() ? 1 : 0);/ 修改if (id1 != 0) Uri uri=ContentUris.withAppendedId(Tasks.CONTENT_URI, id1);getContentResolver().update(uri, values, null, null);/ 保存 else Uri uri = TaskList.Tasks.CONTENT_URI;getContentResolver().ins

39、ert(uri, values);(3)TaskList.java 文件package com.amaker.ch17.app;import .Uri;import android.provider.BaseColumns;public final class TaskList / 授权常量28public static final String AUTHORITY = “com.amaker.provider.TaskList“;private TaskList() / 内部类public static final class Tasks implements BaseColumns pri

40、vate Tasks() / 访问 Uripublic static final Uri CONTENT_URI = Uri.parse(“content:/“ + AUTHORITY + “/taskLists“);public static final String CONTENT_TYPE = “vnd.android.cursor.dir/vnd.amaker.tasklist“;public static final String CONTENT_ITEM_TYPE = “vnd.android.cursor.item/vnd.amaker.tasklist“;/ 默认排序常量pub

41、lic static final String DEFAULT_SORT_ORDER = “created DESC“;/ 表字段常量public static final String CONTENT = “content“;public static final String CREATED= “created“;public static final String DATE1 = “date1“;public static final String TIME1 = “time1“;public static final String ON_OFF = “on_off“;public st

42、atic final String ALARM = “alarm“;(4)TaskListActivity.java 文件package com.amaker.ch17.app;import android.app.ListActivity;import android.content.ContentUris;import android.content.Intent;import android.database.Cursor;import .Uri;import android.os.Bundle;29import android.view.Menu;import android.view

43、.MenuItem;import android.view.View;import android.widget.*;import com.amaker.ch17.app.TaskList.Tasks;public class TaskListActivity extends ListActivity / 菜单项常量private static final int NEW = 1;private static final int DEL = 2;/ 查询列数组private static final String PROJECTION = new String Tasks._ID, / 0Ta

44、sks.CONTENT, / 1Tasks.CREATED, / 2Tasks.ALARM, / 3Tasks.DATE1, / 4Tasks.TIME1, / 5Tasks.ON_OFF / 6;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);/ 获得 Intentfinal Intent intent = getIntent();/ 设置 Uriif (intent.getData() = null) intent.setData(Tasks.CONTENT_URI);/ 获得 ListViewListView listView = getListView();/ 查询所有备忘录信息Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null,null, Tasks.DEFAULT_SOR

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报