基于Android的手机备忘录软件设计.docx
《基于Android的手机备忘录软件设计.docx》由会员分享,可在线阅读,更多相关《基于Android的手机备忘录软件设计.docx(33页珍藏版)》请在冰豆网上搜索。
![基于Android的手机备忘录软件设计.docx](https://file1.bdocx.com/fileroot1/2022-12/11/713e4cac-12e7-4170-8b16-dce37e8162cc/713e4cac-12e7-4170-8b16-dce37e8162cc1.gif)
基于Android的手机备忘录软件设计
课程设计报告
(本科)
课程:
学号:
姓名:
班级:
教师:
时间:
计算机科学与技术系
设计名称:
基于Android的手机备忘录软件设计
设计内容、目的与要求:
一.目的:
利用所学《嵌入式Linux应用开发》课程所学知识,针对实际问题,基于Android系统平台研发出具有实际应用价值的备忘录。
主要内容:
(1)基于Android系统平台研发出备忘录;
(2)通过安装备忘录,防止手机用户遗忘某个时间的重要工作,进行记录并在特定时间通过声音,文字或振动提醒用户;
(3)主要模块有:
备忘录数据存储、数据共享访问、列表浏览、数据维护和定时提醒等模块。
二.基本要求
(1)基于Android系统平台研发出备忘录,以防止手机用户遗忘某个时间的重要工作,进行记录并在特定时间通过声音,文字或振动提醒用户。
(2)主要设计出备忘录数据存储、数据共享访问、列表浏览、数据维护和定时提醒等模块。
已学习掌握Android系统平台和Java编程技术,并要求软件界面简洁专业,功能完善,真正为用户提供重要工作备忘功能。
计划与进度安排:
5月3日~5月15日:
完成设计思路并作出草稿;
5月16日~6月1日:
完成程序的输入;
6月2日~6月10日:
完成对基本功能的修改并运行无误;
6月11日~6月21日:
增加对开始的源程序的功能;
6月22日~6月26日:
修改并完成,提交验收;
设计过程、步骤(可加页):
一.功能结构
二.设计说明
1.备忘录数据存储实现
为了持久地将用户的备忘录信息保存下来,需要将这些信息存储在SQLite数据库中。
备忘录需要保存的信息有:
编号(ID)、提醒日起(Datel)、提醒时间(Time1)、提醒内容(Content)、是否启用(NO_OFF)、是否声音提醒(Alarm)、创建日期(Created)等。
在操作北往里数据表手机,一些属性在几个类中使用,为此我们将其定义为一个常量类,在该常量类中声明。
常量类名称为TaskList,该类有一个内部Tasks继承BaseColumns,在该类中声明URI和列常量等,方便后面使用。
2.备忘录ContentProvidershi实现
为了使备忘录数据表具有通用的数据共享访问机制,需要通过ContentProvider来实现。
这里我们定义一个TaskListProvide类,该类继承ContentProvider,实现了onCreate、query、getType、insert、deleted、update等方法,来支持数据的增、删、查、改等操作。
3.备忘录列表展示
用户可能哟呵常见很多条备忘录信息,而且需要维护这些备忘录信息,例如删除、修改等功能。
这里我们通过一个ListView来展示备忘录列表,通过选项菜单提供微幅数据借口。
4.备忘录维护
备忘录维护是应该用程序的核心,提供了添加、修改备忘录信息的功能。
备忘录信息也通过ListView来展示,ListView的每一项通过自定义View来实现。
通过单击ListView的每一项来设置备忘录信息。
5.备忘录定时提醒
为了更好的提醒用户在特定时间做某项工作,要设置语音和震动等功能,该功能通过定义Activity发出广播,BroadcastReceiver接收广播,并通过Notification提醒用户。
6.程序运行
结果与分析(可以加页):
1.列表展示
主要功能把备忘录界面展示给用户,用户可以添加和删除备忘录信息,很大程度上方便了用户的操作。
运行结果
2.备忘录维护
用户可以很好的将需要或者不需要的备忘录信息进行增添或者删除
运行结果:
3.备忘录定时提醒
这个功能可以很有效的提醒用户关闭备忘录,以免造成不必要的资源浪费。
运行结果:
设计体会与建议:
这个课程设计主要研究了Android平台的架构以及在Android平台上开发备忘录软件, 此应用除了具备简单备忘功能外,还具备简单数据处理功能,还有闹钟提醒相对高级点的功能。
这个课程设计在Android平台以及在该平台上开发手机备忘录软件上做了大量的工作,但因个人能力有限,还有很多问题需要解决,现对未来可以进行的工作做出以下几点感言:
(l)这个课程设计实现的备忘录客户端是基于Android平台进行开发的,但是还未能真正解析Android的精髓,系统的界面设计也不是很完善,对Android平台进一步研究,能够使系统在设计方面更加快捷和完善。
(2)这个课程设计所开发的系统目前还只是在模拟器上进行运行,还有待移植到真机上进行进一步研究。
相信随着研究的进一步深入,这些问题会逐步得到解决,相信基于Android平台的备忘录软件会有很好的应用前景。
附录:
源程序代码
1.AlarmActivity.java
packagecom.amaker.ch17.app;
importandroid.app.Activity;
importandroid.app.Notification;
importandroid.app.NotificationManager;
importandroid.content.Context;
import.Uri;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.TextView;
/**
*@author冯春礼
*提醒用户
*/
publicclassAlarmActivityextendsActivity{
publicstaticfinalintID=1;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.alarm);
//获得Button、TextView实例
Buttonbtn=(Button)findViewById(R.id.cancelButton01);
TextViewtv=(TextView)findViewById(R.id.msgTextView01);
//获得NotificationManager实例
Stringservice=Context.NOTIFICATION_SERVICE;
finalNotificationManagernm=(NotificationManager)getSystemService(service);
//实例化Notification
Notificationn=newNotification();
//设置显示提示信息,该信息也会在状态栏显示
Stringmsg=getIntent().getStringExtra("msg");
//显示时间
n.tickerText=msg;
tv.setText(msg);
//设置声音提示
n.sound=Uri.parse("file:
///sdcard/fallbackring.ogg");
//发出通知
nm.notify(ID,n);
//取消通知
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
nm.cancel(ID);
finish();
}
});
}
}
2.TaskDetailActivity.java
packagecom.amaker.ch17.app;
importjava.util.Calendar;
importandroid.app.AlarmManager;
importandroid.app.AlertDialog;
importandroid.app.DatePickerDialog;
importandroid.app.Dialog;
importandroid.app.ListActivity;
importandroid.app.PendingIntent;
importandroid.app.TimePickerDialog;
importandroid.content.ContentUris;
importandroid.content.ContentValues;
importandroid.content.DialogInterface;
importandroid.content.Intent;
import.Uri;
importandroid.os.Bundle;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.AdapterView;
importandroid.widget.BaseAdapter;
importandroid.widget.CheckedTextView;
importandroid.widget.DatePicker;
importandroid.widget.EditText;
importandroid.widget.ListView;
importandroid.widget.TextView;
importandroid.widget.TimePicker;
importandroid.widget.AdapterView.OnItemClickListener;
importcom.amaker.ch17.app.TaskList.Tasks;
/**
*
*@author冯春礼
*备忘录详细信息类,该信息
*/
publicclassTaskDetailActivityextendsListActivity{
//备忘录信息列表
privateListViewlistView=null;
//提醒日期
privateintmYear;
privateintmMonth;
privateintmDay;
//提醒时间
privateintmHour;
privateintmMinute;
//日期显示TextView
privateTextViewdateName,dateDesc;
//时间显示TextView
privateTextViewtimeName,timeDesc;
//提醒内容TextView
privateTextViewcontentName,contentDesc;
//是否开启提醒
privateinton_off=0;
//是否声音警告
privateintalarm=0;
//显示日期、时间对话框常量
staticfinalintDATE_DIALOG_ID=0;
staticfinalintTIME_DIALOG_ID=1;
//保存内容、日期、时间字符串
privateStringcontent,date1,time1;
//备忘录ID
privateintid1;
//多选框
privateCheckedTextViewctv1,ctv2;
//访问布局实例
privateLayoutInflaterli;
//初始化方法
privatevoidinit(Intentintent){
Bundleb=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(strs[0]);
mMonth=Integer.parseInt(strs[1]);
mDay=Integer.parseInt(strs[2]);
}
if(time1!
=null&&time1.length()>0){
String[]strs=time1.split(":
");
mHour=Integer.parseInt(strs[0]);
mMinute=Integer.parseInt(strs[1]);
}
}
}
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//获得ListView
listView=getListView();
//实例化LayoutInflater
li=getLayoutInflater();
//设置ListViewAdapter
listView.setAdapter(newViewAdapter());
//可多选
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
//获得Calendar实例
finalCalendarc=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(newOnItemClickListener(){
@Override
publicvoidonItemClick(AdapterView
>av,Viewv,intposition,
longid){
switch(position){
//设置是否开启提醒
case0:
ctv1=(CheckedTextView)v;
if(ctv1.isChecked()){
on_off=0;
}else{
on_off=1;
}
break;
//设置提醒日期
case1:
showDialog(DATE_DIALOG_ID);
break;
//设置提醒时间
case2:
showDialog(TIME_DIALOG_ID);
break;
//设置提醒内容
case3:
showDialog1("请输入内容:
");
break;
//设置是否开启语音提醒
case4:
ctv2=(CheckedTextView)v;
if(ctv2.isChecked()){
alarm=0;
setAlarm(false);
}else{
alarm=1;
setAlarm(true);
}
break;
default:
break;
}
}
});
}
@Override
protectedvoidonResume(){
super.onResume();
//初始化列表
init(getIntent());
}
//ListViewAdatper,该类实现了列表的每一项通过自定义视图实现
classViewAdapterextendsBaseAdapter{
//列表显示内容
String[]strs={"是否开启","日期","时间","内容","开启闹钟"};
//获得列表列数
@Override
publicintgetCount(){
returnstrs.length;
}
//返回列表项
@Override
publicObjectgetItem(intposition){
returnposition;
}
//返回列表ID
@Override
publiclonggetItemId(intposition){
returnposition;
}
//获得当前列表项视图
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
Viewv=li.inflate(R.layout.item_row,null);
switch(position){
//是否开启该条备忘录
case0:
ctv1=(CheckedTextView)li
.inflate(
android.R.layout.simple_list_item_multiple_choice,
null);
ctv1.setText(strs[position]);
if(on_off==0){
ctv1.setChecked(false);
}else{
ctv1.setChecked(true);
}
returnctv1;
//提醒日期
case1:
dateName=(TextView)v.findViewById(R.id.name);
dateDesc=(TextView)v.findViewById(R.id.desc);
dateName.setText(strs[position]);
dateDesc.setText(mYear+"/"+mMonth+"/"+mDay);
returnv;
//提醒时间
case2:
timeName=(TextView)v.findViewById(R.id.name);
timeDesc=(TextView)v.findViewById(R.id.desc);
timeName.setText(strs[position]);
timeDesc.setText(mHour+":
"+mMinute);
returnv;
//提醒内容
case3:
contentName=(TextView)v.findViewById(R.id.name);
contentDesc=(TextView)v.findViewById(R.id.desc);
contentName.setText(strs[position]);
contentDesc.setText(content);
returnv;
//是否声音提示
case4:
ctv2=(CheckedTextView)li
.inflate(
android.R.layout.simple_list_item_multiple_choice,
null);
ctv2.setText(strs[position]);
if(alarm==0){
ctv2.setChecked(false);
}else{
ctv2.setChecked(true);
}
returnctv2;
default:
break;
}
returnnull;
}
}
//显示对话框
@Override
protectedDialogonCreateDialog(intid){
switch(id){
//显示日期对话框
caseDATE_DIALOG_ID:
returnnewDatePickerDialog(this,mDateSetListener,mYear,mMonth,
mDay);
//显示时间对话框
caseTIME_DIALOG_ID:
returnnewTimePickerDialog(this,mTimeSetListener,mHour,mMinute,
false);
}
returnnull;
}
//设置通知提示
privatevoidsetAlarm(booleanfl