Android日程管理专家.doc_第1页
Android日程管理专家.doc_第2页
Android日程管理专家.doc_第3页
Android日程管理专家.doc_第4页
Android日程管理专家.doc_第5页
免费预览已结束,剩余16页可下载查看

下载本文档

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

文档简介

实训报告 姓 名: 学 号: 专 业: 课程名称: 指导教师: 实训日期: 年月日 至 年 月日 2014年 1月 2 日 Android项目开发实训总结报告目 录第一章 概述1第二章 需求分析22.1 项目背景22.2 项目需求2第三章 相关技术33.1 Adnroid平台介绍33.2 关键技术研究3第四章 概要设计44.1 系统体系结构44.2 用户界面设计5第五章 详细设计105.1 详细功能模块10第六章 结论21第一章 概述 在日常繁杂的工作中,总是有很多重要日程需要安排,个人的日常工作、领导的重要会议、个人重要日期或者时间等,都需要在特定时间给予醒目标识或者提示,日程安排就可以完成这些工作。日常安排主要功能是完成个人一般日程和重要日程安排,可以选择提醒方式。在计算机开始使用的时候,各人的日程安排有了明显的进步,我们可以通过计算机来记录备忘数据,并可以提醒给用户。但在网络还不发达的情况下,还不能实现日程共享等功能,但在进入20世纪90年代,Microsoft 推出了Office工具对人们的办公操作有了很大的帮助。人们在记录和提醒,以及共享都成为了可能。在Outlook中有日历的功能实现,备忘录的记录提醒功能等,在通过邮件等功能就可以很好的完成人与人之间的提示功能。目前日程管理软件多如牛毛,如佳盟个人信息管理软件、PNotes、桌面日历秀、TeamOffce等等。信息管理软件为例,不仅可以制定编辑日程任务,还可以设定提醒功能,大大提高了办公效率。日程管理在现代人们的办公自动化中扮演了越来越重要的角色。如今是一个信息爆炸的年代,时间贵于一切。而各行各业的精英们也每天都在自己的领域中不停忙碌。如果能有一个日程管理工具那么肯定事半功倍。但在软件开发办公自动化系统中由于商业原因,很多企业要自己根据项目的具体情况进行开发日程安排系统。基于国土资源电子政务平台的办公自动化系统就需要进行日程安排系统的设计与开发。这里的日程安排包括,备忘录的记录,查询、提醒、共享等功能。7- 7 -第二章 需求分析2.1 项目背景Android系统在成为全球最流行的智能手机操作系统,2012年11月,android全球市场占有率达到76%,在中国份额更是达到90%,2013年9月24日,全世界android的设备数量已经达到10亿台,智能手机的功能是越来越强大,它已经进入人类生活的各个领域,如炒股、聊天、娱乐及上网冲浪社交等。手机日程管理系统可以为人们的生活提供方便,而且能让我们更充分的利用时间,规划我们的生活,让我们的生活有条不紊。现在,大部分人都会有1到2个android设备,包括pad、或手机,我们可以随时随地拿出手机查看我们的日程安排,而且手机日常管理系统,还提供到点提醒功能,让我们能够准时完成我们的日程安排。 手机日程管理系统就是基于这个原因而做出,日程管理是我们生活中的一部分,使之更好的安排我们的生活节奏。在日常繁杂的工作中,总是有很多重要日程需要安排,个人的日常工作、领导的重要会议、个人重要日期或者时间等,都需要在特定时间给予醒目标识或者提示,日程安排就可以完成这些工作。日常安排主要功能是完成个人一般日程和重要日程安排,可以选择提醒方式。在没有计算机的时代,我们对日程安排只能通过手写来记录,并且没有相应的提醒工具,人们有时会因为没有及时翻阅记录而错过了重要会议、重要日程等,也因为翻阅日程记录而浪费了很多的时间。在20世纪60年代在随着电子技术的发展,出现了一些好的提醒工具,比如闹钟。人们就可以通过闹钟的提示来完成日程的提醒,但是闹钟只是能提醒最近一个记录,这样就会总要去设置时间来提示,也会浪费很多的时间。像一个人错过了重要会议会有什么后果。所以日程安排的重要性尤为重要。2.2 项目需求1. 通过关于本系统管理系统的实现,是个人的日程管理更加完善。 2. 可以查看日历、月历、农历。 3. 可以编辑日程事务,了解行程。 4. 可以提醒备忘事项,大大提高了办事效率。第三章 相关技术3.1 Android平台介绍安卓是首款开源代码的操作系统,采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改安卓的SDK软件包。系统的开源性使其具有良好的拓展性,一方面,为众多移动应用开发者提供了良好的系统性平台,有利于移动应用的集合;另一方面,终端厂商可以针对自身的特殊需要“定制化开发”。与此相比,尽管2010年2月,塞班基本完成开源工作,但由于代码臃肿,用户界面设计缺失,塞班的开源并无实际意义,错失发展良机。 据Informa预测,2012年,安卓手机销量将超过诺基亚塞班手机,届时安卓将成为全球最大的智能手机平台。谷歌表示目前安卓手机每日平均激活量为20万部,销售速度加速上涨。 我们认为,安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不争事实。安卓操作系统发展迅猛主要得益于免费、开源和良好产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。系统的免费让更多的厂商加入,推动了份额的上升;代码的开源让更多的开发者进入应用开发;应用的丰富吸引了更多用户选择,这也是谷歌值得众多厂商学习的地方。此外,谷歌通过OHA联合众多厂商进行系统研发,不断更新版本,将系统应用推广到更多的终端产品中,确保用户体验持续改善。3.2 关键技术研究 选取一些图片素材,作为软件图标和界面背景。Activity设计:因为在Android开发中,界面设计和后台功能设计是分开的,这样是为了降低耦合性,本软件中需设计主界面、新建日程界面、欢迎界面、类型管理界面、日程查找界面、查找结果界面、帮助界面等界面。在界面设计中,我们会使用文本控件、按钮控件、ToggleButton控件(是否开启闹钟等)、DatePicker和TimePicker控件(提取当前日期和时间)、ListView(用来显示日程信息),界面设计使用的都是View的子类,界面布局会使用到LinearLayout(线性布局),每个Button类按钮都会用设置监听器,从而进行事件处理,并于layout中设置属性,还会使用到Toast类中的Notification(用NotificationManager来管理实现),实现日程通知栏的提醒,对话框是接收用户输入的信息的一个控件,在界面的设计中都会使用到。第四章 概要设计日程管理专家日期模块 日期显示 日程显示日程管理模块 日程编辑4.1 系统体系结构 日程管理结构图 4-1-14.2 用户界面设计首页 图4-2-1添加 图4-2-2关于 图4-2-3感想 图4-2-4日历 图4-2-5第五章 详细设计5.1 详细功能模块11. SyncLogAdapter.javapackage vider;import android.content.ContentResolver;import android.content.ContentValues;import android.database.sqlite.SQLiteDatabase;import com.zhike.util.TimeDiary;public class SyncLogAdapter public static final String KEY_TYPE = type;public static final String KEY_METHOD = method;public static final String KEY_PID = pid;public static final String KEY_STATE = state;public static final String KEY_ROWID = _id;public static void log(SQLiteDatabase db, String type, String method, long pid) db.execSQL(insert into sync_logs (type,method,pid,state)+ values(?,?,?,?), new Object type, method, pid, 0 );public static void log(ContentResolver contentResolver,String type, String method, long pid) ContentValues cv = new ContentValues();cv.put(type, type);cv.put(method, method);cv.put(pid, pid);cv.put(state, 0);contentResolver.insert(TimeDiary.SYNC_LOG_CONTENT_URI, cv);12. ThoughtsAdapter.javapackage vider;public class ThoughtsAdapter public static final String KEY_ROWID = _id;public static final String KEY_DATE = date;public static final String KEY_INTRO = content;13. TypeAdapter.javapackage vider;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import com.zhike.util.DatabaseUtil;public class TypeAdapter public static final String KEY_NAME = name;public static final String KEY_ROWID = _id;private DatabaseUtil mDbUtil;private SQLiteDatabase mDb;private static final String DATABASE_TABLE = event_types;private final Context mCtx;public SQLiteDatabase getMDb() return mDb;public void setMDb(SQLiteDatabase db) mDb = db;public TypeAdapter(Context mCtx) this.mCtx = mCtx;public TypeAdapter open() throws SQLException mDbUtil = new DatabaseUtil(mCtx);mDb = mDbUtil.getWritableDatabase();return this;public void close() mDbUtil.close();public long createEventType(String name) ContentValues initialValues = new ContentValues();initialValues.put(KEY_NAME, name);return mDb.insert(DATABASE_TABLE, null, initialValues);public boolean deleteEventType(long rowId) return mDb.delete(DATABASE_TABLE, KEY_ROWID + = + rowId, null) 0;public Cursor fetchAllEventTypes() return mDb.query(DATABASE_TABLE, new String KEY_ROWID, KEY_NAME ,null, null, null, null, null);public Cursor fetchEventType(long rowId) throws SQLException Cursor mCursor =mDb.query(true, DATABASE_TABLE, new String KEY_ROWID, KEY_NAME ,KEY_ROWID + = + rowId, null, null, null, null, null);if (mCursor != null) mCursor.moveToFirst();return mCursor;public boolean updateEventType(long rowId, String name) ContentValues args = new ContentValues();args.put(KEY_NAME, name);return mDb.update(DATABASE_TABLE, args, KEY_ROWID + = + rowId, null) 0;14. IntentReceiver.javapackage com.zhike.sync;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.preference.PreferenceManager;public class IntentReceiver extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent intent) SharedPreferences sharePreferences = PreferenceManager.getDefaultSharedPreferences(context);boolean needSync = sharePreferences.getBoolean(sync_config_checkbox,false);if (needSync) Intent serviceIntent = new Intent();serviceIntent.setAction(com.zhike.timediary.sync.SYNC_SERVICE);context.startService(serviceIntent); 15. SyncService.javapackage com.zhike.sync;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import .HttpURLConnection;import .MalformedURLException;import .URL;import .URLEncoder;import android.app.AlarmManager;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.app.Service;import android.content.ContentValues;import android.content.Intent;import android.content.SharedPreferences;import android.database.Cursor;import .Uri;import android.os.IBinder;import android.preference.PreferenceManager;import android.util.Log;import com.zhike.R;import com.zhike.activity.Settings;import com.zhike.util.TimeDiary;public class SyncService extends Service private static final String TAG = sync;private static final String FAIL = 0;private static final String SUCCESS = 1;private static final String NOT_FOUND = 2;private static String WEB_URL = ;private static boolean RUN_FLAG = false;private static int INTERVAL = 60;private static boolean NEED_SYNC;private SharedPreferences sharePreferences;Overridepublic void onCreate() super.onCreate();sharePreferences = PreferenceManager.getDefaultSharedPreferences(this);INTERVAL = Integer.valueOf(sharePreferences.getString(sync_interval_list, 60);AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);Intent intent = new Intent(this, SyncService.class);PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent,0);alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60 * 1000, (INTERVAL * 60 * 1000),pendingIntent);Overridepublic void onStart(Intent intent, int startId) super.onStart(intent, startId);NEED_SYNC = sharePreferences.getBoolean(sync_config_checkbox, false);WEB_URL = sharePreferences.getString(sync_url_edit, );if (NEED_SYNC) if (.equals(WEB_URL) | http:/.equals(WEB_URL) NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);Notification nf = new Notification(R.drawable.icon,getString(R.string.notice_title), System.currentTimeMillis();PendingIntent contentIntent = PendingIntent.getActivity(this,0, new Intent(this, Settings.class), 0);nf.setLatestEventInfo(this, getString(R.string.app_name),getString(R.string.notice_message), contentIntent);manager.notify(R.string.notice_title, nf);return;Thread thread = new Thread(null, doBackgroundThreadProcessing,Background);thread.start();private String syncOne(String webUrl, String type, String method,String body) HttpURLConnection con = null;try body = URLEncoder.encode(body, UTF-8);URL url = new URL(webUrl + ?type= + type + &method= + method+ &body= + body);con = (HttpURLConnection) url.openConnection();con.setReadTimeout(10000 /* milliseconds */);con.setConnectTimeout(15000 /* milliseconds */);con.setRequestMethod(GET);con.setDoInput(true);con.connect();BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), UTF-8);String result = reader.readLine();reader.close();if (result != null) if (update.equals(method) & SUCCESS.equals(result.trim() return SUCCESS;if (delete.equals(method)& (SUCCESS.equals(result.trim() | NOT_FOUND.equals(result.trim() return SUCCESS; catch (UnsupportedEncodingException e) Log.e(TAG, UnsupportedEncodingException, e); catch (MalformedURLException e) Log.e(TAG, MalformedURLException, e); catch (IOException e) Log.e(TAG, IOException, e);return FAIL;private Runnable doBackgroundThreadProcessing = new Runnable() public void run() if (RUN_FLAG)return;RUN_FLAG = true; Cursor cursor = getNeedSyncLog();cursor.moveToFirst();long id = 0;long pid = 0;String type = ;String method = ;String body = ;try while (!cursor.isAfterLast() id = cursor.getLong(cursor.getColumnIndex(_id);type = cursor.getString(cursor.getColumnIndex(type);method = cursor.getString(cursor.getColumnIndex(method);pid = cursor.getLong(cursor.getColumnIndex(pid);body = getBody(type, method, pid);if (.equals(body) cursor.moveToNext();continue;try if (SUCCESS.equals(syncOne(WEB_URL, type, method, body) updateSyncLogState(id, SUCCESS);cursor.moveToNext(); else updateSyncLogState(id, FAIL);break; catch (Exception e) Log.d(SyncService, 自动同步更新出错!);cursor.moveToNext();continue;cursor.close();deleteSuccessSyncLog(); catch (Exception e) Log.d(SyncService, 获取自动同步数据出错!);RUN_FLAG = false;/ 组装消息内容private String getBody(String type, String method, long pid) String body = ;if (delete.equals(method) body = pid= + pid;deleteSuccessSyncLog(pid); else if (update.equals(method) Cursor mCursor;if (eventtype.equals(type) mCursor = getContentResolver().query(Uri.withAppendedPath(TimeDiary.EVENT_TYPE_CONTENT_URI, / + pid),new String name , null, null, null);if (mCursor != null & mCursor.getCount() 0) mCursor.moveToFirst();String name = mCursor.getString(mCursor.getColumnIndex(name);body = pid= + pid + &name= + name;mCursor.close(); else if (timeitem.equals(type) mCursor = getContentResolver().query(Uri.withAppendedPath(TimeDiary.DIARY_ITEM_CONTENT_URI,/ + pid),new String content, date, hour, minute,rate, event_type , null, null, null);if (mCursor != null & mCursor.getCount() 0) mCursor.moveToFirst();String content = mCursor.getString(mCursor.getColumnIndex(content);String date = mCursor.getString(mCursor.getColumnIndex(date);int hour = mCursor.getInt(mCursor.getColumnIndex(hour);int minute = mCursor.getInt(mCursor.getColumnIndex(minute);int rate = mCursor.getInt(mCursor.getColumnIndex(rate);long eventtype = mCursor.getLong(mCursor.getColumnIndex(event_type);body = pid= + pid + &content= + content + &date=+ date + &hour= + hour + &minute= + minute+ &rate= + rate + &eventtype= + eventtype;mCursor.close(); else if (introspection.equals(type) mCursor = getContentResolver().query(Uri.withAppendedPath(TimeDiary.THOUGHTS_CONTENT_URI, /+ pid),new String introspection, date , null, null,null);if (mCursor != null & mCursor.getCount

温馨提示

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

评论

0/150

提交评论