ImageVerifierCode 换一换
格式:DOC , 页数:25 ,大小:270.54KB ,
资源ID:8943448      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8943448.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于Android的手机备忘录软件设计.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于Android的手机备忘录软件设计.doc

1、 课程设计报告 (本科) 课程: 嵌入式系统 学号: 姓名: 班级: 教师: 时间: 2013年5月3日至6月20日 计算机科学与技术系 设计名称: 基于Android的手机备忘录软件设计 设计内容、目的与要求: 一.目的:  利用所学《嵌入式Linux应用开发》课程所学知识,针对实际问题,基于Android系统平台研发出具有实际应用价值的备忘录。  主要内容:  (1)基于Android系统平台研发出备忘录;  (2)通过安装备忘录,防止手机用户遗忘某个时间的重要工作,进行记录并在特

2、定时间通过声音,文字或振动提醒用户;  (3)主要模块有:备忘录数据存储、数据共享访问、列表浏览、数据维护和定时提醒等模块。   二.基本要求  (1)基于Android系统平台研发出备忘录,以防止手机用户遗忘某个时间的重要工作,进行记录并在特定时间通过声音,文字或振动提醒用户。  (2)主要设计出备忘录数据存储、数据共享访问、列表浏览、数据维护和定时提醒等模块。已学习掌握Android系统平台和Java编程技术,并要求软件界面简洁专业,功能完善,真正为用户提供重要工作备忘功能。 计划与进度安排: 5月 3日~5月15日: 完成设计思路并作出草稿; 5月16日~6月1

3、日: 完成程序的输入; 6月2日~6月10日: 完成对基本功能的修改并运行无误; 6月11日~6月21日: 增加对开始的源程序的功能; 6月22日~6月26日: 修改并完成,提交验收; 设计过程、步骤(可加页): 一. 功能结构 开始 设置是否开启 设置时间 备忘录内容 结束 开启闹钟 二. 设计说明 1. 备忘录数据存储实现 为了持久地将用户的备忘录信息保存下来,需要将这些信息存储在SQLite数据库中。备忘录需要保存的信息有:编号(ID)、提醒日起(Datel)、提醒时间(T

4、ime1)、提醒内容(Content)、是否启用(NO_OFF)、是否声音提醒(Alarm)、创建日期(Created)等。 在操作北往里数据表手机,一些属性在几个类中使用,为此我们将其定义为一个常量类,在该常量类中声明。常量类名称为TaskList,该类有一个内部Tasks继承BaseColumns,在该类中声明URI和列常量等,方便后面使用。 2. 备忘录ContentProvidershi实现 为了使备忘录数据表具有通用的数据共享访问机制,需要通过ContentProvider来实现。这里我们定义一个TaskListProvide类,该类继承ContentProvide

5、r,实现了onCreate、query、getType、insert、deleted、update等方法,来支持数据的增、删、查、改等操作。 3. 备忘录列表展示 用户可能哟呵常见很多条备忘录信息,而且需要维护这些备忘录信息,例如删除、修改等功能。这里我们通过一个ListView来展示备忘录列表,通过选项菜单提供微幅数据借口。 4. 备忘录维护 备忘录维护是应该用程序的核心,提供了添加、修改备忘录信息的功能。备忘录信息也通过ListView来展示,ListView的每一项通过自定义View来实现。通过单击ListView的每一项来设置备忘录信息。 5. 备忘录

6、定时提醒 为了更好的提醒用户在特定时间做某项工作,要设置语音和震动等功能,该功能通过定义Activity发出广播,BroadcastReceiver接收广播,并通过Notification提醒用户。 6. 程序运行 结果与分析(可以加页): 1. 列表展示 主要功能把备忘录界面展示给用户,用户可以添加和删除备忘录信息,很大程度上方便了用户的操作。 运行结果 2. 备忘录维护 用户可以很好的将需要或者不需要的备忘录信息进行增添或者删除 运行结果: 3. 备忘录定时提醒 这个功能可以很有效的提醒用户关闭备忘录,以免造成不必要的资源浪费。

7、运行结果: 设计体会与建议: 这个课程设计主要研究了Android平台的架构以及在Android平台上开发备忘录软件, 此应用除了具备简单备忘功能外,还具备简单数据处理功能,还有闹钟提醒相对高级点的功能。这个课程设计在Android平台以及在该平台上开发手机备忘录软件上做了大量的工作,但因个人能力有限,还有很多问题需要解决,现对未来可以进行的工作做出以下几点感言: (l)这个课程设计实现的备忘录客户端是基于Android平台进行开发的,但是还未能真正解析Android的精髓,系统的界面设计也不是很完善,对Android平台进一步研究,能够使系统在设计方面更加快捷和完善。 (2)这个

8、课程设计所开发的系统目前还只是在模拟器上进行运行,还有待移植到真机上进行进一步研究。相信随着研究的进一步深入,这些问题会逐步得到解决,相信基于Android平台的备忘录软件会有很好的应用前景。 附录:源程序代码 1. AlarmActivity.java package com.amaker.ch17.app; import android.app.Activity; import android.app.Notification; import android.app.Notificati

9、onManager; 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

10、 { public static final int ID = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alarm); // 获得Button、TextView实例 Button btn = (Button) findViewById(R.id.cancelButton01); TextView tv = (TextView)findVie

11、wById(R.id.msgTextView01); // 获得NotificationManager实例 String service = Context.NOTIFICATION_SERVICE; final NotificationManager nm = (NotificationManager)getSystemService(service); // 实例化Notification Notification n = new Notification(); // 设置显示提示信息,该信息也会在状态栏显示 String msg = ge

12、tIntent().getStringExtra("msg"); // 显示时间 n.tickerText = msg; tv.setText(msg); // 设置声音提示 n.sound = Uri.parse("file:///sdcard/fallbackring.ogg"); // 发出通知 nm.notify(ID, n); // 取消通知 btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v

13、) { nm.cancel(ID); finish(); } }); } } 2. TaskDetailActivity.java package 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.

14、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.vie

15、w.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 an

16、droid.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 list

17、View = null; // 提醒日期 private int mYear; private int mMonth; private int mDay; // 提醒时间 private int mHour; private int mMinute; // 日期显示TextView private TextView dateName, dateDesc; // 时间显示TextView private TextView timeName, timeDesc; // 提醒内容TextView private TextView contentNa

18、me, 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; // 备忘录ID private int id1; // 多选框 privat

19、e 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.getS

20、tring("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]); }

21、if (time1 != null && time1.length() > 0) { String[] strs = time1.split(":"); mHour = Integer.parseInt(strs[0]); mMinute = Integer.parseInt(strs[1]); } } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获得Li

22、stView listView = getListView(); // 实例化LayoutInflater li = 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() { @Override public

24、 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:

25、 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

26、 0; setAlarm(false); } else { alarm = 1; setAlarm(true); } break; default: break; } } }); } @Override protected void onResume() { super.onResume(); // 初始化列表 init(getIntent()); } // ListView Adatper,该类实现了列表的每一项通过自定义视图

27、实现 class ViewAdapter extends BaseAdapter { // 列表显示内容 String[] strs = { "是否开启", "日期", "时间", "内容", "开启闹钟" }; // 获得列表列数 @Override public int getCount() { return strs.length; } // 返回列表项 @Override public Object getItem(int position) { return position; } // 返回列表I

28、D @Override public long getItemId(int position) { return position; } // 获得当前列表项视图 @Override public View getView(int position, View convertView, ViewGroup parent) { View v = li.inflate(R.layout.item_row, null); switch (position) { // 是否开启该条备忘录 case 0: ctv1 =

29、 (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); } return ctv1; // 提醒日期 case 1:

30、 dateName = (TextView) v.findViewById(R.id.name); dateDesc = (TextView) v.findViewById(R.id.desc); dateName.setText(strs[position]); dateDesc.setText(mYear + "/" + mMonth + "/" + mDay); return v; // 提醒时间 case 2: timeName = (TextView) v.findViewById(R.id.name); t

31、imeDesc = (TextView) v.findViewById(R.id.desc); timeName.setText(strs[position]); timeDesc.setText(mHour + ":" + mMinute); return v; // 提醒内容 case 3: contentName = (TextView) v.findViewById(R.id.name); contentDesc = (TextView) v.findViewById(R.id.desc); contentNa

32、me.setText(strs[position]); contentDesc.setText(content); return v; // 是否声音提示 case 4: ctv2 = (CheckedTextView) li .inflate( android.R.layout.simple_list_item_multiple_choice, null); ctv2.setText(strs[position]); if (alarm == 0) { ctv2

33、setChecked(false); } else { ctv2.setChecked(true); } return ctv2; default: break; } return null; } } // 显示对话框 @Override protected Dialog onCreateDialog(int id) { switch (id) { // 显示日期对话框 case DATE_DIALOG_ID: return new DatePickerDia

34、log(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.

35、ch17.TaskReceiver"; // 获得AlarmManager实例 final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); // 实例化Intent Intent intent = new Intent(); // 设置Intent action属性 intent.setAction(BC_ACTION); intent.putExtra("msg", content); // 实例化PendingIntent final PendingIn

36、tent 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&&

37、on_off==1){ am.set(AlarmManager.RTC_WAKEUP, time2, pi); }else{ am.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); conten

38、tET.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(); conten

39、tDesc.setText(content); } }).show(); } // 时间选择对话框 private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; time

40、Desc.setText(mHour + ":" + mMinute); } }; // 日期选择对话框 private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthO

41、fYear; mDay = dayOfMonth; dateDesc.setText(mYear + "/" + mMonth + "/" + mDay); } }; // 保存或修改备忘录信息 protected void onPause() { super.onPause(); saveOrUpdate(); }; // 保存或修改备忘录信息 private void saveOrUpdate() { ContentValues values = new ContentValues(); values.clea

42、r(); 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);

43、 // 修改 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

44、 package com.amaker.ch17.app; import .Uri; import android.provider.BaseColumns; /** * @author 冯春礼 * 备忘录常量类 */ public final class TaskList { // 授权常量 public static final String AUTHORITY = "com.amaker.provider.TaskList"; private TaskList() {} // 内部类 public st

45、atic 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";

46、 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 stati

47、c 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

48、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

49、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, // 0 Tasks.CONTENT, // 1 Tasks.CREATED, // 2 Tasks.ALARM, //

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服