《Android項(xiàng)目開發(fā)實(shí)訓(xùn)》項(xiàng)目總結(jié)報(bào)告0001_第1頁(yè)
《Android項(xiàng)目開發(fā)實(shí)訓(xùn)》項(xiàng)目總結(jié)報(bào)告0001_第2頁(yè)
《Android項(xiàng)目開發(fā)實(shí)訓(xùn)》項(xiàng)目總結(jié)報(bào)告0001_第3頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)訓(xùn)報(bào)告姓名:祝新學(xué)號(hào):1 144131專業(yè):軟件技術(shù)課程名稱: android 實(shí)訓(xùn)項(xiàng)目名稱:鬧鈴指導(dǎo)教師:王皓實(shí)訓(xùn)日期:2013年10月28日 至2014年1月2日2014 年 1 月 2 日目錄第一章 概述 1.第二章 需求分析 2.2.1 項(xiàng)目背景 . 2.2.2 項(xiàng)目需求 . 2.第三章 相關(guān)技術(shù) 3.3.1 Adnroid 平臺(tái)介紹 3.3.2 關(guān)鍵技術(shù)研究3.第四章 概要設(shè)計(jì) 4.4.1 系統(tǒng)體系結(jié)構(gòu) 4.4.2 用戶界面設(shè)計(jì) . 4.第五章 詳細(xì)設(shè)計(jì) 6.5.1 添加鬧鈴功能模塊 . 6.第六章 結(jié)論 1. 6.第一章 概述本課題要求:設(shè)計(jì)一個(gè)基于 Android 的位置鬧鐘的

2、軟件。實(shí)現(xiàn)的功能有:a) 能在 Android 上利用其提供地相關(guān) API 獲取位置信息。b) 能通過界面設(shè)置鬧鐘的啟動(dòng)條件,包括入場(chǎng)與出場(chǎng)條件的設(shè)c) 建立后臺(tái)服務(wù)進(jìn)程,監(jiān)查位置信息,當(dāng)滿足觸發(fā)條件時(shí),鬧鐘響應(yīng)相應(yīng) 事件。 需重點(diǎn)研究的關(guān)鍵問題:通過 Android Api 獲取位置信息,并在指定地點(diǎn)設(shè) 置鬧鐘 提醒。解決思路:在界面里顯示當(dāng)前位置信息 (經(jīng)緯度值 ) ,并輸入指定地點(diǎn)的經(jīng) 緯度值, 編程實(shí)現(xiàn)對(duì)位置信息實(shí)時(shí)更新, 將兩者的經(jīng)緯度轉(zhuǎn)換為距離, 如在誤差 范圍內(nèi)則啟動(dòng) 鬧鈴功能。第二章需求分析2.1 項(xiàng)目背景移動(dòng)互聯(lián)網(wǎng)時(shí)代的來臨,直接促進(jìn)了搭載智能操作系統(tǒng)、具有強(qiáng)大擴(kuò)展性的 智能

3、手 機(jī)、平板電腦等移動(dòng)終端產(chǎn)業(yè)的蓬勃發(fā)展。搭載安卓操作系統(tǒng)的智能手機(jī) 目前已經(jīng)成為 市場(chǎng)上最炙手可熱的智能產(chǎn)品。開放的源代碼和零成本已經(jīng)讓安卓 在全世界范圍內(nèi)受到 青睞并迅速獲得了主要手機(jī)廠商和數(shù)百萬軟件開發(fā)者的支 持 , 2011 年安卓系統(tǒng)的市場(chǎng)份 額已經(jīng)超過 Symbian, 成為全球第一大智能手機(jī)操 作系統(tǒng)。GP 護(hù)業(yè)從軍用轉(zhuǎn)入民用后,正在逐漸向普通消費(fèi)群體發(fā)展,作為使用終端 的 GPS 產(chǎn)品正逐漸的深入人們生活得各個(gè)領(lǐng)域。 GPS 使用終端最主要的應(yīng)用方面 主要體現(xiàn)在 各種接收器,比如航空、航海用途的接收器,汽車導(dǎo)航設(shè)備,或用于 登上、遠(yuǎn)足的手持 接收器等終端產(chǎn)品。 GPS 接收終端

4、的結(jié)構(gòu)包括,接收天線、芯 片組、電池等,以及外 部按鍵和液晶面板等相關(guān)零部件。該課題實(shí)現(xiàn)在手機(jī)操作系統(tǒng) An droid 上將 GPS 導(dǎo)航和鬧鐘提醒兩個(gè)功能結(jié) 合起 來,攜帶方便,并能超越傳統(tǒng)的時(shí)間鬧鐘提醒功能,使用起來靈活、快捷、 省心,是一 款實(shí)用而且高端的手機(jī)軟件。2.2 項(xiàng)目需求位置鬧鐘”是一款提醒你地點(diǎn)的軟件,它通過地圖指定提醒的目的地,同時(shí) 要求定 位精確、使用過程可用 Wifi (節(jié)省手機(jī)流量)和普通無網(wǎng)絡(luò)。位置鬧鐘”可以通過 GPS 定位和手機(jī)蜂窩基站定位兩種定位方式來監(jiān)測(cè)用 戶所在 位置。當(dāng)你靠近目的地的時(shí)候, 位置鬧鐘”會(huì)進(jìn)行鬧鐘提醒。而在封閉的 空間中,如擁擠的公交車上

5、,接收不到衛(wèi)星的 GPS 信號(hào),此時(shí),手機(jī)基站定位 就可派 上用場(chǎng)。雖然基站的定位精度比起 GPS 來說稍低,但完全可以滿足位置 提醒的要求。 此外,“位置鬧鐘”還可以后臺(tái)運(yùn)行,且能和普通鬧鐘一樣設(shè)置多 個(gè)位置鬧鈴,有良好 的人機(jī)交互界面,可對(duì)其編輯、啟用或禁用。第三章相關(guān)技術(shù)3.1 Adn roid 平臺(tái)介紹An droid 是一種基于 Linux 的自由及開放源代碼的操作系統(tǒng),主要使用于移 動(dòng)設(shè) 備,如智能手機(jī)和平板電腦,由 Google 公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。 尚未有統(tǒng)一中文名稱,中國(guó)大陸地區(qū)較多人使用“安卓”或“安致”。An droid操作系統(tǒng)最初由 Andy Rubin 開發(fā)

6、,主要支持手機(jī)。 2005 年 8 月由 Google 收購(gòu) 注資。 2007 年 11 月, Google 與 84 家硬件制造商、軟件開發(fā)商及電信營(yíng)運(yùn)商組建開放手機(jī)聯(lián)盟共同研發(fā)改良 An droid 系統(tǒng)。隨后 Google 以 Apache 開源許可證 的授權(quán)方式,發(fā)布 了 An droid 的源代碼。第一部 An droid 智能手機(jī)發(fā)布于 2008 年 10 月。 An droid 逐漸 擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機(jī)、游 戲機(jī)等。 2011 年第一季度, An droid 在全球的市場(chǎng)份額首次超過塞班系統(tǒng), 躍居 全球第一。 2012 年 11 月數(shù)據(jù)顯示, An d

7、roid 占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng) 76% 勺份 額,中國(guó)市場(chǎng)占有率為 90% 2013 年 09 月 24 日谷歌開發(fā)的操作系統(tǒng) An droid 在迎來了 5 歲生日,全世界采用這款系統(tǒng)的設(shè)備數(shù)量已經(jīng)達(dá)到10 億臺(tái)。3.2 關(guān)鍵技術(shù)研究應(yīng)用 SQLLite 數(shù)據(jù)庫(kù): SQLite 提供結(jié)構(gòu)化的數(shù)據(jù)存取。 SQLite 是一款輕型的 數(shù)據(jù)庫(kù), 它的設(shè)計(jì)目標(biāo)是嵌入式的,目前已經(jīng)在很多嵌入式產(chǎn)品使用了它, 它占 用的資源非常低。它能夠支持 Windows/Linux/Unix 等主流的操作系統(tǒng),同時(shí)能 夠跟很 多程序語(yǔ)言相結(jié)合,比如 php, Java 等, 還有 ODBCS 口,同樣比起

8、Mysql , PostgreSQL 來講,它的處理速度比它們都快。它無需安裝和管理配置,它是一 個(gè)儲(chǔ)存 在單一磁盤文件中的完整數(shù)據(jù)庫(kù),體積小, 雖只有 250KB 但支持?jǐn)?shù)據(jù)庫(kù)大 小至 2TB 它雖然很小巧,但是支持的 SQL 語(yǔ)句毫不遜色于其它開源數(shù)據(jù)庫(kù)。同 時(shí)它還支持事務(wù)功能 和并發(fā)處理等等。 SQLite 也是 一套開放性的關(guān)聯(lián)式資料庫(kù), 其特點(diǎn)在于輕量性方面的設(shè) 計(jì)結(jié)構(gòu),更適合在手機(jī)上使用。第四章概要設(shè)計(jì)4.1系統(tǒng)體系結(jié)構(gòu)5所示。系統(tǒng)旨在建立An droid系統(tǒng)的鬧鐘,主要有如下幾個(gè)核心功能模塊如圖主程序T IJE功能添加鬧鈴、設(shè)置時(shí)間、重復(fù)等音樂、鬧鈴提醒方式圖片選取返回首頁(yè)圖5系

9、統(tǒng)功能模塊圖4.2用戶界面設(shè)計(jì)通過小組討論用戶的界面如下22第五章詳細(xì)設(shè)計(jì)5.1添加鬧鈴功能模塊Tjirn alarm nn具體實(shí)現(xiàn)代碼如下:/* Copyright (C) 2009 The An droid Ope n Source Project* Lice nsed un der the Apache Lice nse, Versi on 2.0 (the "Lice nse");* you may not use this file except in complianee with the License.* You may obta in a copy of

10、the Lice nse at* n ses/LICENSE-2.0* Uni ess required by applicable law or agreed to in writi ng, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUTWARRANTIEOR CONDITIONSOF ANY KIND, either express implied.* See the Lice nse for the specific Ian guage gover

11、 ning permissi ons and* limitations under the License.*/ package com.a n droid.superdeskclock;import an droid.c onten t.C on text;import an droid .n et.Uri;public final class Alarm implements Parcelable / Parcelable apis/public static final Parcelable.Creator<Alarm> CREATOR = newParcelable.Cre

12、ator<Alarm>() public Alarm createFromParcel(Parcel p) return new Alarm(p);public Alarm newArray(int size) return new Alarmsize;public int describeContents() return 0;public void writeToParcel(Parcel p, int flags) p.writeInt(id); p.writeInt(enabled ? 1 : 0);p.writeInt(hour);p.writeInt(minutes);

13、 p.writeInt(daysOfWeek.getCoded(); p.writeLong(time); p.writeInt(vibrate ? 1 : 0);p.writeString(label);p.writeParcelable(alert, flags); p.writeInt(silent ? 1 : 0);/ 新增p.writeInt(times); p.writeInt(interval);/ end Parcelable apis/ Column definitions/public static class Columns implements BaseColumns

14、/* The content:/ style URL for this table */ public static final Uri CONTENT_URI =* Hour in 24-hour localtime 0 - 23.* <P>Type: INTEGER</P> */ public static final String HOUR = "hour"* Minutes in localtime 0 - 59* <P>Type: INTEGER</P> */ public static final String M

15、INUTES = "minutes"* Days of week coded as integer* <P>Type: INTEGER</P> */ public static final String DAYS_OF_WEEK = "daysofweek"* Alarm time in UTC milliseconds from the epoch.* <P>Type: INTEGER</P>*/public static final String ALARM_TIME = "alarmtime

16、"* True if alarm is active* <P>Type: BOOLEAN</P> */ public static final String ENABLED = "enabled"True if alarm should vibrate <P>Type: BOOLEAN</P> */public static final String VIBRATE = "vibrate"* Message to show when alarm triggers* Note: not curren

17、tly used* <P>Type: STRING</P>*/public static final String MESSAGE = "message"* Audio alert to play when alarm triggers* <P>Type: STRING</P>*/ public static final String ALERT = "alert"/ 新增public static final String TIMES = "times" public static f

18、inal String INTERVAL = "interval"* The default sort order for this table */public static final String DEFAULT_SORT_ORDER = HOUR + ", " + MINUTES+ " ASC"/ Used when filtering enabled alarms.public static final String WHERE_ENABLED = ENABLED + "=1" static finalS

19、tring ALARM_QUERY_COLUMNS = _ID, HOUR, MINUTES, DAYS_OF_WEEK, ALARM_TIME, ENABLED, VIBRATE, MESSAGE, ALERT/ 新增 ,TIMES,INTERVAL;* These save calls to cursor.getColumnIndexOrThrow()* THEY MUST BE KEPT IN SYNC WITH ABOVE QUERY COLUMNS */ public static final int ALARM_ID_INDEX = 0;public static final in

20、t ALARM_HOUR_INDEX = 1;public static final int ALARM_MINUTES_INDEX = 2;public static final int ALARM_DAYS_OF_WEEK_INDEX = 3; public static final int ALARM_TIME_INDEX = 4;public static final int ALARM_ENABLED_INDEX = 5; public static final int ALARM_VIBRATE_INDEX = 6;public static final int ALARM_MES

21、SAGE_INDEX = 7;public static final int ALARM_ALERT_INDEX = 8;/ 新增public static final int ALARM_TIMES_INDEX = 9;public static final int ALARM_INTERVAL_INDEX = 10; / End column definitions/ Public fields public int id; public boolean enabled; public inthour;public intminutes;public DaysOfWeek daysOfWe

22、ek; public long time; public boolean vibrate;public String label; public Uri alert; public boolean silent;/ 新增public int times;public int interval;public Alarm(Cursor c) id = c.getInt(Columns.ALARM_ID_INDEX);enabled = c.getInt(Columns.ALARM_ENABLED_INDEX) = 1; hour = c.getInt(Columns.ALARM_HOUR_INDE

23、X);newminutes = c.getInt(Columns.ALARM_MINUTES_INDEX); daysOfWeek = DaysOfWeek(c.getInt(Columns.ALARM_DAYS_OF_WEEK_INDEX); time = c.getLong(Columns.ALARM_TIME_INDEX); vibrate = c.getInt(Columns.ALARM_VIBRATE_INDEX) = 1; label = c.getString(Columns.ALARM_MESSAGE_INDEX);/ 新增times = c.getInt(Columns.AL

24、ARM_TIMES_INDEX); interval = c.getInt(Columns.ALARM_INTERVAL_INDEX);String alertString = if (Log.LOGV) Log.v("Alarm is marked as silent");silent = true; else if (alertString != null && alertString.length() != 0) alert = Uri.parse(alertString);/ If the database alert is null or it f

25、ailed to parse, use the/ default alert.if (alert = null) alert = RingtoneManager.getDefaultUri( RingtoneM anager.TYPE_ALARM); public Alarm(Parcel p) id = p.readInt(); enabled = p.readInt() = 1;hour = p.readInt(); minutes = p.readInt();daysOfWeek = new DaysOfWeek(p.readInt(); time = p.readLong(); vib

26、rate = p.readInt() = 1;label = p.readString();alert = (Uri) p.readParcelable(null);silent = p.readInt() = 1;/ 新增times=p.readInt(); interval=p.readInt(); / Creates a default alarm at the current time. public Alarm() id = -1;Calendar c = Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMill

27、is(); hour = c.get(Calendar.HOUR_OF_DAY); minutes = c.get(Calendar.MINUTE); vibrate = true;daysOfWeek = new DaysOfWeek(0); alert RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);/ 新增 times=10; interval=0;public String getLabelOrDefault(Context context) if (label = null | label.length() = 0)

28、 return label;/* Days of week code as a sin gle int* 0x00 no day* 0x01 Monday* 0x02 Tuesday* 0x04 Wed nesday* 0x08 Thursday* 0x10 Friday* 0x20 Saturday* 0x40 Sunday*/static final class DaysOfWeek private static in t DAY_MAP = new in t Cale ndar.MONDAY,Cale ndar.TUESDAY,Cale ndar.WEDNESDAY,Cale ndar.

29、THURSDAY,Cale ndar.FRIDAY,Cale ndar.SATURDAY,Cale ndar.SUNDAY,;/ Bitmask of all repeating days private int mDays; DaysOfWeek(i nt days) mDays = days;public Stri ng toStri ng(C on text con text, boolea n showNever) Stri ngBuilder ret = new Stri ngBuilder();/ no days if (mDays =0) return showNevercon

30、text.getText(R.stri ng. never).toStri ng()Illi ?J / every day if (mDays = 0x7f) retur ncon text.getText(R.stri ng.every_day).toStri ng();/ count selected days int dayCo unt = 0, days = mDays; while (days > 0) if (days & 1) = 1) dayCount+; days >>= 1;/ short or long form? DateFormatSymbo

31、ls dfs = new DateFormatSymbols(); String dayList = (dayCount > 1) dfs.getShortWeekdays() : dfs.getWeekdays();/ selected daysfor (int i = 0; i < 7; i+) if (mDays & (1 << i) != 0) ret.append(dayListDAY_MAPi);dayCount -= 1;if (dayCount > 0)return ret.toString();private boolean isSet(int day) return (mDays & (1 << day) > 0);public void set(int day, boolean set) if (set) mDays |= (1 << day); else mDays &= (1 << day);public void set

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論