




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告(本科)课程:嵌入式系统学号:姓名:班级:教师:时间:2013年5月3日至6月20日计算机科学与技术系设计名称:基于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.javapackage com.amaker.ch17.app;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;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;/* * author 冯春礼 * 提醒用户 */public class AlarmActivity extends Activity public static final int ID = 1;Overrideprotected 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() Overridepublic void onClick(View v) nm.cancel(ID);finish(););2. TaskDetailActivity.javapackage com.amaker.ch17.app;import java.util.Calendar;import android.app.AlarmManager;import android.app.AlertDialog;import android.app.DatePickerDialog;import android.app.Dialog;import android.app.ListActivity;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.content.ContentUris;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import .Uri;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.CheckedTextView;import android.widget.DatePicker;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.TimePicker;import android.widget.AdapterView.OnItemClickListener;import com.amaker.ch17.app.TaskList.Tasks;/* * * author 冯春礼 * 备忘录详细信息类,该信息 */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;/ 备忘录IDprivate int id1;/ 多选框private 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);Overridepublic 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() Overridepublic void onItemClick(AdapterView av, View v, int position,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;);Overrideprotected void onResume() super.onResume();/ 初始化列表init(getIntent();/ ListView Adatper,该类实现了列表的每一项通过自定义视图实现class ViewAdapter extends BaseAdapter / 列表显示内容String strs = 是否开启, 日期, 时间, 内容, 开启闹钟 ;/ 获得列表列数Overridepublic int getCount() return strs.length;/ 返回列表项Overridepublic Object getItem(int position) return position;/ 返回列表IDOverridepublic long getItemId(int position) return position;/ 获得当前列表项视图Overridepublic 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;/ 显示对话框Overrideprotected 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;/ 设置通知提示private void setAlarm(boolean flag) final String BC_ACTION = com.amaker.ch17.TaskReceiver;/ 获得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.javapackage com.amaker.ch17.app;import .Uri;import vider.BaseColumns;/* * author 冯春礼 * 备忘录常量类 */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.javapackage 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.AdapterView;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.AdapterView.OnItemClickListener;import com.amaker.ch17.app.TaskList.Tasks;/* * * author 冯春礼 * 备忘录列表类,提供数据展示 */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;Overrideprotected 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() Overridepublic 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);/ 将备忘录信息添加到Intentintent.putExtra(b, b);/ 启动备忘录详细信息Activityintent.setClass(TaskListActivity.this, TaskDetailActivity.class);startActivity(intent););/ 创建选项菜单public boolean onCreateOptionsMenu(Menu menu) menu.add(0, NEW, 0, 新建);menu.add(0, DEL, 0, 删除);return true;/ 现象菜单项单击方法public boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case NEW:/ 启动备忘录详细信息ActivityIntent intent = new Intent();intent.setClass(this, TaskDetailActivity.class);startActivity(intent);return true;case DEL:return true;return false;5. TaskListProvider.javapackage com.amaker.ch17.app;import java.util.HashMap;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import android.database.C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农技站种子监管员必-备知识面试题解析
- 软件开发流程技术保证措施
- 2025年CCRA考试预测题之信贷市场分析
- 2025年检验科生物安全培训考核试题+答案
- 2025年宝洁校招面试模拟题及解析
- 2025年市场营销师认证考试模拟题集与答案
- 2025届高三语文复习备考听力提升计划
- 废弃物处理环保流程
- 呼吸道传染病防控医疗操作与安置防护知识试卷及答案
- 2025年个人品牌塑造与营销策略面试题集
- 2025-2026学年沪教版(2024)初中音乐七年级上册教学计划及进度表
- 2025-2026学年赣美版一年级美术上册(全册)教学设计(附目录 )
- 2022室外排水设施设计与施工-钢筋混凝土化粪池22S702
- GB∕T 6546-2021 瓦楞纸板边压强度的测定
- 历史选择性必修1 国家制度与社会治理(思考点学思之窗问题探究)参考答案
- 学前儿童发展心理学(第3版-张永红)教学课件1754
- 医学资料冠心病英文版
- 中职《机械基础》全套课件(完整版)
- 部编人教版九年级语文上册教学计划及教学进度表
- 干法——稻盛和夫
- 城市垃圾焚烧发电处理讲解
评论
0/150
提交评论