Android开发(智能备忘录系统).doc_第1页
Android开发(智能备忘录系统).doc_第2页
Android开发(智能备忘录系统).doc_第3页
Android开发(智能备忘录系统).doc_第4页
Android开发(智能备忘录系统).doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*大学智能终端开发课程设计说明书课题名称:姓 名:学 号:专 业:班 级:指导教师: 2014年12月25日目 录第一章 概 述-第二章 需求分析- 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章 调试分析- 第六章 设计总结- 第七章 参考文献- 第八章 附录- 第一章 概述 对于很多人来说,随时带个小本子记录一些事情是很有必要的事情,从而出现了备忘录。有了备忘录,可以将自己的工作和生活安排的更有条理,在有限的时间内完成最重要、最紧急的事情。随着智能手机逐渐走进普通人的生活,它正在成为人们获取信息的主要设备,而且智能手机是他们获取信息最方便、最快捷的途径。因此,对于所有拥有的手机的用户来说,可以随时随地便捷的通过手机备忘录来实现重要事情的记录与提醒,省去了随身携带纸笔的麻烦。现如今搭载Android系统平台的手机已占有超过70%的市场份额,所以,在Android系统下的备忘录软件中,用户可以非常方便的查询事件备忘,为工作、出游、生活杂碎事提供整理记录功能。开发一款能在Android系统上使用,且性能卓越的备忘录是非常有必要且前途光明。第二章 需求分析2.1、系统主要内容:(1)、基于Android系统平台研发出备忘录;(2)、通过安装备忘录,防止手机用户遗忘某个时间的重要工作,进行记录并在特定时间通过声音,文字或振动提醒用户;(3)、主要模块有:备忘录数据存储、列表浏览、数据维护和定时提醒等模块。2.2、基本要求:(1)、基于Android系统平台研发出备忘录,以防止手机用户遗忘某个时间的重要工作,进行记录并在特定时间通过声音,文字或振动提醒用户。(2)、主要设计出备忘录数据存储、列表浏览、数据维护和定时提醒等模块。已学习掌握Android系统平台和Java编程技术,并要求软件界面简洁专业,功能完善,真正为用户提供重要工作备忘功能。2.3、设计需要结合使用的技术:(1)、Eclipse平台:Eclipse 是一个运行插件的平台。可以下载安装 Eclipse Classic 的最新版本。(2)、Android Developer Tools:按照安装说明安装 Android Developer Tools(Eclipse 插件)。2.4、模块的功能性概述:(1)、备忘录数据存储实现:备忘录的最重要功能就是记录和保存用户容易遗忘的日期和事件,为了持久地将用户的备忘录信息保存下来,需要将这些信息存储在数据库中。备忘录需要保存的信息有:编号(ID)、提醒日期(Date1)、提醒时间(Time1)、提醒内容(Content)、是否启用(ON_OFF)、是否声音提醒(ALARM)、创建时间(CREATED)等.(2)、备忘录列表展示:用户可能需要创建很多条备忘录信息,并且需要维护这些备忘录信息,例如删除、修改等功能。备忘录的列表展示能使用户界面更加简洁清晰,并带给用户使用方便(3)、备忘录维护:备忘录维护是该应用程序的核心部分,提供了添加、修改、删除备忘录信息的功能,提供备忘录动态更新的功能。(4)、备忘录定时提醒:备忘录的第一需求是能够有效提醒用户置办已记录的事件,从而达到真正避免遗忘的效果,为了更好的提醒用户在特定时间做某项工作,要设置语音和震动等功能。第三章 概要设计3.1、系统的功能结构:开始设置是否开启设置日期时间备忘录内容结束开启闹钟3.2、系统的模块结构:3.3、各模块的活动图:3.3.1、添加备忘录添加日期、时间、闹铃:添加内容:3.3.2、查看备忘录3.3.3修改备忘录 修改日期、时间、闹铃:修改内容:3.3.4删除备忘录第四章 详细设计 4.1、布局文件main.xmlfill_parent:使视图元素占满可用的空间。也可以认为这就是 “拉伸”。4.2、备忘录数据存储的实现为了使备忘录数据表具有通用的数据共享访问机制,需要通过ContentProvider来实现。这里定义一个TaskListProvider类,该类继承ContentProvider,实现了onCreat、query、getType、insert、delete、update等方法,来支持数据的增、删、查、改等操作。在该类内部还定义了一个DatabaseHelper内部类继承SQLiteHelper,该类提供了常见或打开数据库、创建或删除表的功能。4.3、备忘录的列表展示:这里通过一个ListActivity来展示备忘录列表,通过选项菜单提供维护数据接口。4.4、备忘录的维护:当用户单击主界面的一个列表时会在上述列表展示中提到的setOnItemClickListener方法中响应,此方法体中定义一个Intent对象,使用setClass方法实现界面跳转到此TaskDetailActivity所对应的界面4.5、备忘录的定时提醒:此功能通过定义Activity发出广播,BroadcastReceiver接收广播,并通过Notification提醒用户。4.5.1定义提醒广播接收器当用户选择了备忘录信息中的“开启闹钟”选项时,便通过广播的方式启动一个定时闹钟,之后定义一个广播接收器接收广播。4.5.2广播接收器实现如下4.5.3显示提醒Activity:第五章 调试分析程序运行:列表展示:备忘录维护:备忘录定时提醒: 总体来说,调试过程中基本没有出现系统性错误,软件健壮性良好,测试数据随机采用,基本实现软件要实现的需求。第六章 设计总结经过一个多月的学习和研究,本次课程设计终于圆满完成,虽然耗费了许多精力和时间,设计过程中也出现了许多问题,但通过网上资料的查询、图书馆图书的借阅以及同学们的帮助,最终也逐一得到了解决。通过本次课程设计,我了解到实践经验对于学生的重要性。备忘录软件的开发使我对书本上的知识点和理论有了更深一层的了解,使我学会了如何利用所学的知识,把理论结合于实践中,进一步掌握了开发基于Android平台的软件的流程。本次课程设计主要研究了Android平台的架构以及在Android平台上开发备忘录软件,此应用除了具备简单备忘功能外,还具备简单数据处理功能以及闹钟提醒相对高级点的功能。本次课程设计在Android平台以及在该平台上开发手机备忘录软件上做了大量的工作,但仍有许多地方值得进一步探讨研究,如:界面设计如何更加美观简洁,软件的移植性、兼容性如何等。Android开发是一个开放的平台,需要不断进行内容添加和补充,这也就要求我们学生不断学习新知识,从而使软件功能不断扩展。 同时,本次课程设计让我对智能终端开发这门课程有了更深层次的了解,也让我发现了自我存在的不足,今后,在Android开发的学习之路上,我必须更加重视实践与理论的结合,在系统的扩展性方面花费更多的精力去学习。第七章 参考文献【1】零点起飞学 Android开发徐诚 著,清华大学出版社2Android基础教程 (美)伯内特 著,张波 等译/2009年11月/人民邮电出版社3Android应用程序开发,王向辉,张国印,沈洁 编著/2010年3月/清华大学出版社 4Java宝典,孙浏毅 等编著/2009年8月/电子工业大学出版社 5XML程序设计使用教程,张亚飞,汤桂风 编著/2010年8月/北京师范大学出版社 6Java编程思想(美)Bruce Eckel著,陈昊鹏 译/2011年4月/机械工业出版社 7Android程序设计基础郝玉龙/2011年1月/清华大学出版社第八章 附 录(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.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实例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 = 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() public void onClick(View v) nm.cancel(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.*;import 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;/ 时间显示TextViewprivate TextView timeName, timeDesc;/ 提醒内容TextViewprivate TextView contentName, contentDesc;private int on_off = 0;/ 是否开启提醒private int alarm = 0;/ 是否声音警告/ 显示日期、时间对话框常量static final int DATE_DIALOG_ID = 0;static final int TIME_DIALOG_ID = 1;/ 保存内容、日期、时间字符串private String content, date1, time1;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);on_off = b.getInt(on_off);alarm = b.getInt(alarm);if (date1 != null & date1.length() 0) String strs = date1.split(/);mYear = Integer.parseInt(strs0);mMonth = Integer.parseInt(strs1);mDay = Integer.parseInt(strs2);if (time1 != null & time1.length() 0) String strs = time1.split(:);mHour = Integer.parseInt(strs0);mMinute = Integer.parseInt(strs1);public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);/ 获得ListViewlistView = getListView();/ 实例化LayoutInflaterli = getLayoutInflater();/ 设置ListView Adapter listView.setAdapter(new ViewAdapter();/ 可多选listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);/ 获得Calendar实例final Calendar c = Calendar.getInstance();/ 获得当前日期、时间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, intposition,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);break;/ 设置提醒时间case 2:showDialog(TIME_DIALOG_ID);break;/ 设置提醒内容case 3:showDialog1(请输入内容:);break;/ 设置是否开启语音提醒case 4:ctv2 = (CheckedTextView) 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 / 列表显示内容String strs = 是否开启,日期,时间,内容,开启闹钟 ;/ 获得列表列数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, 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.);dateDesc = (TextView) v.findViewById(R.id.desc);dateName.setText(strsposition);dateDesc.setText(mYear + / + mMonth + / + mDay);return v;/ 提醒时间case 2:timeName = (TextView) v.findViewById(R.);timeDesc = (TextView) v.findViewById(R.id.desc);timeName.setText(strsposition);timeDesc.setText(mHour + : + mMinute);return v;/ 提醒内容case 3:contentName = (TextView) v.findViewById(R.);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_item_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) / 显示日期对话框case DATE_DIALOG_ID:return new DatePickerDialog(this, mDateSetListener, 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) getSystemService(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.currentTimeMillis();Calendar c = Calendar.getInstance();c.set(mYear, mMonth, mDay, mHour, mMinute);long time2 = c.getTimeInMillis();if (flag&(time2-time1)0&on_off=1)am.set(AlarmManager.RTC_WAKEUP, time2, pi);elseam.cancel(pi);/设置提示日期对话框private void showDialog1(String msg) View v = li.inflate(R.layout.item_content, null);final EditText contentET = (EditText) v.findViewById(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(content);).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.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) mYear = year;mMonth = monthOfYear;mDay = dayOfMonth;dateDesc.setText(mYear + / + mMonth + / + mDay);/ 保存或修改备忘录信息protected void onPause() 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();values.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().insert(uri, values);(3) TaskList.java文件package com.amaker.ch17.app;import .Uri;import vider.BaseColumns;public final class TaskList / 授权常量public static final String AUTHORITY = vider.TaskList; private TaskList() / 内部类 public static final class Tasks implements BaseColumns private Tasks() / 访问Uri public 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; / 默认排序常量 public 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 static 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;import android.view.Menu;import android.view.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, / 0Tasks.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_SORT_ORDER);/ 创建AdapterSimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, new String Tasks._ID,Tasks.CONTENT ,new int android.R.id.text1,android.R.id.text2 );/ 将备忘录信息显示到ListViewsetListAdapter(adapter);/ 为ListView添加单击事件监听器listView.setOnItemClickListener(new OnItemClickListener() public void onItemClick(AdapterView av, View v, int position, long id) / 通过ID查询备忘录信息Uri uri =ContentUris.withAppendedId(Tasks.CONTENT_URI, id);Cursor cursor = managedQuery(uri, PROJECTION, null, null, Tasks.DEFAULT_SORT_ORDER);if(cursor.moveToNext()int id1 = cursor.getInt(0);String content = cursor.getString(1);String created = cursor.getString(2);int alarm = cursor.getInt(3);String date1 = cursor.getString(4);String time1 = cursor.getString(5);int on_off = cursor.getInt(6);Bundle b = new Bundle();b.putInt(id, id1);b.putString(content, content);b.putString(created, created);b.putInt(alarm, alarm);b.putString(date1, date1);b.putString(time1, time1);b.putInt(on_off, on_off);/ 将备忘录信息添加到Intentin/ 启动备忘录详细信息Activityintent.setClass(TaskListActivity.this,TaskDetailActivity.class);startActivity(intent););

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论