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

下載本文檔

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

文檔簡(jiǎn)介

實(shí)用文檔PAGE

實(shí)訓(xùn)報(bào)告

名:

祝新

學(xué)

號(hào):

1144131

專(zhuān)

業(yè):

軟件技術(shù)

課程名稱(chēng):

android實(shí)訓(xùn)

項(xiàng)目名稱(chēng):

鬧鈴

指導(dǎo)教師:

王浩

實(shí)訓(xùn)日期:

日至

2013年

12月

17日Android項(xiàng)目開(kāi)發(fā)實(shí)訓(xùn)總結(jié)報(bào)告目錄

TOC\o"1-2"\h\z\u第一章概述 1第二章需求分析 22.1項(xiàng)目背景 22.2項(xiàng)目需求 2第三章相關(guān)技術(shù) 33.1Adnroid平臺(tái)介紹 33.2關(guān)鍵技術(shù)研究 3第四章概要設(shè)計(jì) 44.1系統(tǒng)體系結(jié)構(gòu) 44.2用戶(hù)界面設(shè)計(jì) 4第五章詳細(xì)設(shè)計(jì) 95.1添加鬧鈴功能模塊 95.2*****功能模塊 18第六章結(jié)論 19PAGE1 -PAGE1-第一章概述本課題要求:設(shè)計(jì)一個(gè)基于Android的位置鬧鐘的軟件。實(shí)現(xiàn)的功能有:a)能在Android上利用其提供地相關(guān)API獲取位置信息。b)能通過(guò)界面設(shè)置鬧鐘的啟動(dòng)條件,包括入場(chǎng)與出場(chǎng)條件的設(shè)c) 建立后臺(tái)服務(wù)進(jìn)程,監(jiān)查位置信息,當(dāng)滿(mǎn)足觸發(fā)條件時(shí),鬧鐘響應(yīng)相應(yīng)事件。需重點(diǎn)研究的關(guān)鍵問(wèn)題:通過(guò)AndroidApi獲取位置信息,并在指定地點(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)鬧鈴功能。PAGE8第二章需求分析2.1項(xiàng)目背景移動(dòng)互聯(lián)網(wǎng)時(shí)代的來(lái)臨,直接促進(jìn)了搭載智能操作系統(tǒng)、具有強(qiáng)大擴(kuò)展性的智能手機(jī)、平板電腦等移動(dòng)終端產(chǎn)業(yè)的蓬勃發(fā)展。搭載安卓操作系統(tǒng)的智能手機(jī)目前已經(jīng)成為市場(chǎng)上最炙手可熱的智能產(chǎn)品。開(kāi)放的源代碼和零成本已經(jīng)讓安卓在全世界范圍內(nèi)受到青睞并迅速獲得了主要手機(jī)廠(chǎng)商和數(shù)百萬(wàn)軟件開(kāi)發(fā)者的支持,2011年安卓系統(tǒng)的市場(chǎng)份額已經(jīng)超過(guò)Symbian,成為全球第一大智能手機(jī)操作系統(tǒng)。GPS產(chǎn)業(yè)從軍用轉(zhuǎn)入民用后,正在逐漸向普通消費(fèi)群體發(fā)展,作為使用終端的GPS產(chǎn)品正逐漸的深入人們生活得各個(gè)領(lǐng)域。GPS使用終端最主要的應(yīng)用方面主要體現(xiàn)在各種接收器,比如航空、航海用途的接收器,汽車(chē)導(dǎo)航設(shè)備,或用于登上、遠(yuǎn)足的手持接收器等終端產(chǎn)品。GPS接收終端的結(jié)構(gòu)包括,接收天線(xiàn)、芯片組、電池等,以及外部按鍵和液晶面板等相關(guān)零部件。該課題實(shí)現(xiàn)在手機(jī)操作系統(tǒng)Android上將GPS導(dǎo)航和鬧鐘提醒兩個(gè)功能結(jié)合起來(lái),攜帶方便,并能超越傳統(tǒng)的時(shí)間鬧鐘提醒功能,使用起來(lái)靈活、快捷、省心,是一款實(shí)用而且高端的手機(jī)軟件。2.2項(xiàng)目需求“位置鬧鐘”是一款提醒你地點(diǎn)的軟件,它通過(guò)地圖指定提醒的目的地,同時(shí)要求定位精確、使用過(guò)程可用Wifi(節(jié)省手機(jī)流量)和普通無(wú)網(wǎng)絡(luò)?!拔恢敏[鐘”可以通過(guò)GPS定位和手機(jī)蜂窩基站定位兩種定位方式來(lái)監(jiān)測(cè)用戶(hù)所在位置。當(dāng)你靠近目的地的時(shí)候,“位置鬧鐘”會(huì)進(jìn)行鬧鐘提醒。而在封閉的空間中,如擁擠的公交車(chē)上,接收不到衛(wèi)星的GPS信號(hào),此時(shí),手機(jī)基站定位就可派上用場(chǎng)。雖然基站的定位精度比起GPS來(lái)說(shuō)稍低,但完全可以滿(mǎn)足位置提醒的要求。此外,“位置鬧鐘”還可以后臺(tái)運(yùn)行,且能和普通鬧鐘一樣設(shè)置多個(gè)位置鬧鈴,有良好的人機(jī)交互界面,可對(duì)其編輯、啟用或禁用。第三章相關(guān)技術(shù)3.1Adnroid平臺(tái)介紹Android是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開(kāi)放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開(kāi)發(fā)。尚未有統(tǒng)一中文名稱(chēng),中國(guó)大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由AndyRubin開(kāi)發(fā),主要支持手機(jī)。2005年8月由Google收購(gòu)注資。2007年11月,Google與84家硬件制造商、軟件開(kāi)發(fā)商及電信營(yíng)運(yùn)商組建開(kāi)放手機(jī)聯(lián)盟共同研發(fā)改良Android系統(tǒng)。隨后Google以Apache開(kāi)源許可證的授權(quán)方式,發(fā)布了Android的源代碼。第一部Android智能手機(jī)發(fā)布于2008年10月。Android逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機(jī)、游戲機(jī)等。2011年第一季度,Android在全球的市場(chǎng)份額首次超過(guò)塞班系統(tǒng),躍居全球第一。2012年11月數(shù)據(jù)顯示,Android占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng)76%的份額,中國(guó)市場(chǎng)占有率為90%。2013年09月24日谷歌開(kāi)發(fā)的操作系統(tǒng)Android在迎來(lái)了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等,還有ODBC接口,同樣比起Mysql,PostgreSQL來(lái)講,它的處理速度比它們都快。它無(wú)需安裝和管理配置,它是一個(gè)儲(chǔ)存在單一磁盤(pán)文件中的完整數(shù)據(jù)庫(kù),體積小,雖只有250KB但支持?jǐn)?shù)據(jù)庫(kù)大小至2TB。它雖然很小巧,但是支持的SQL語(yǔ)句毫不遜色于其它開(kāi)源數(shù)據(jù)庫(kù)。同時(shí)它還支持事務(wù)功能和并發(fā)處理等等。SQLite也是一套開(kāi)放性的關(guān)聯(lián)式資料庫(kù),其特點(diǎn)在于輕量性方面的設(shè)計(jì)結(jié)構(gòu),更適合在手機(jī)上使用。第四章概要設(shè)計(jì)4.1系統(tǒng)體系結(jié)構(gòu)系統(tǒng)旨在建立Android系統(tǒng)的鬧鐘,主要有如下幾個(gè)核心功能模塊如圖5所示。主程序主程序 返回首頁(yè)圖片選取節(jié)能功能添加鬧鈴、設(shè)置時(shí)間、重復(fù)等音樂(lè)、鬧鈴提醒方式返回首頁(yè)圖片選取節(jié)能功能添加鬧鈴、設(shè)置時(shí)間、重復(fù)等音樂(lè)、鬧鈴提醒方式圖5系統(tǒng)功能模塊圖4.2用戶(hù)界面設(shè)計(jì)通過(guò)小組討論用戶(hù)的界面如下: 4.2.1 主頁(yè)面 4.2.2添加鬧鈴功能 4.2.3音樂(lè)清單PAGE18-第五章詳細(xì)設(shè)計(jì)5.1添加鬧鈴功能模塊具體實(shí)現(xiàn)代碼如下:/**Copyright(C)2009TheAndroidOpenSourceProject**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**/licenses/LICENSE-2.0**Unlessrequiredbyapplicablelaworagreedtoinwriting,software*distributedundertheLicenseisdistributedonan"ASIS"BASIS,*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.*SeetheLicenseforthespecificlanguagegoverningpermissionsand*limitationsundertheLicense.*/packagecom.android.superdeskclock;importjava.text.DateFormatSymbols;importjava.util.Calendar;importandroid.content.Context;importandroid.database.Cursor;importandroid.media.RingtoneManager;import.Uri;importandroid.os.Parcel;importandroid.os.Parcelable;importvider.BaseColumns;publicfinalclassAlarmimplementsParcelable{////////////////////////////////Parcelableapis//////////////////////////////publicstaticfinalParcelable.Creator<Alarm>CREATOR=newParcelable.Creator<Alarm>(){publicAlarmcreateFromParcel(Parcelp){returnnewAlarm(p);}publicAlarm[]newArray(intsize){returnnewAlarm[size];}};publicintdescribeContents(){return0;}publicvoidwriteToParcel(Parcelp,intflags){p.writeInt(id);p.writeInt(enabled?1:0);p.writeInt(hour);p.writeInt(minutes);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);}////////////////////////////////endParcelableapis//////////////////////////////////////////////////////////////Columndefinitions//////////////////////////////publicstaticclassColumnsimplementsBaseColumns{/***Thecontent://styleURLforthistable*/publicstaticfinalUriCONTENT_URI=Uri.parse("content://com.android.superdeskclock/alarm");/***Hourin24-hourlocaltime0-23.*<P>Type:INTEGER</P>*/publicstaticfinalStringHOUR="hour";/***Minutesinlocaltime0-59*<P>Type:INTEGER</P>*/publicstaticfinalStringMINUTES="minutes";/***Daysofweekcodedasinteger*<P>Type:INTEGER</P>*/publicstaticfinalStringDAYS_OF_WEEK="daysofweek";/***AlarmtimeinUTCmillisecondsfromtheepoch.*<P>Type:INTEGER</P>*/publicstaticfinalStringALARM_TIME="alarmtime";/***Trueifalarmisactive*<P>Type:BOOLEAN</P>*/publicstaticfinalStringENABLED="enabled";/***Trueifalarmshouldvibrate*<P>Type:BOOLEAN</P>*/publicstaticfinalStringVIBRATE="vibrate";/***Messagetoshowwhenalarmtriggers*Note:notcurrentlyused*<P>Type:STRING</P>*/publicstaticfinalStringMESSAGE="message";/***Audioalerttoplaywhenalarmtriggers*<P>Type:STRING</P>*/publicstaticfinalStringALERT="alert";//新增publicstaticfinalStringTIMES="times";publicstaticfinalStringINTERVAL="interval";/***Thedefaultsortorderforthistable*/publicstaticfinalStringDEFAULT_SORT_ORDER=HOUR+","+MINUTES+"ASC";//Usedwhenfilteringenabledalarms.publicstaticfinalStringWHERE_ENABLED=ENABLED+"=1";staticfinalString[]ALARM_QUERY_COLUMNS={_ID,HOUR,MINUTES,DAYS_OF_WEEK,ALARM_TIME,ENABLED,VIBRATE,MESSAGE,ALERT//新增,TIMES,INTERVAL};/***Thesesavecallstocursor.getColumnIndexOrThrow()*THEYMUSTBEKEPTINSYNCWITHABOVEQUERYCOLUMNS*/publicstaticfinalintALARM_ID_INDEX=0;publicstaticfinalintALARM_HOUR_INDEX=1;publicstaticfinalintALARM_MINUTES_INDEX=2;publicstaticfinalintALARM_DAYS_OF_WEEK_INDEX=3;publicstaticfinalintALARM_TIME_INDEX=4;publicstaticfinalintALARM_ENABLED_INDEX=5;publicstaticfinalintALARM_VIBRATE_INDEX=6;publicstaticfinalintALARM_MESSAGE_INDEX=7;publicstaticfinalintALARM_ALERT_INDEX=8;//新增publicstaticfinalintALARM_TIMES_INDEX=9;publicstaticfinalintALARM_INTERVAL_INDEX=10;}////////////////////////////////Endcolumndefinitions////////////////////////////////Publicfieldspublicintid;publicbooleanenabled;publicinthour;publicintminutes;publicDaysOfWeekdaysOfWeek;publiclongtime;publicbooleanvibrate;publicStringlabel;publicUrialert;publicbooleansilent;//新增publicinttimes;publicintinterval;publicAlarm(Cursorc){id=c.getInt(Columns.ALARM_ID_INDEX);enabled=c.getInt(Columns.ALARM_ENABLED_INDEX)==1;hour=c.getInt(Columns.ALARM_HOUR_INDEX);minutes=c.getInt(Columns.ALARM_MINUTES_INDEX);daysOfWeek=newDaysOfWeek(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.ALARM_TIMES_INDEX);interval=c.getInt(Columns.ALARM_INTERVAL_INDEX);StringalertString=c.getString(Columns.ALARM_ALERT_INDEX);if(Alarms.ALARM_ALERT_SILENT.equals(alertString)){if(Log.LOGV){Log.v("Alarmismarkedassilent");}silent=true;}else{if(alertString!=null&&alertString.length()!=0){alert=Uri.parse(alertString);}//Ifthedatabasealertisnulloritfailedtoparse,usethe//defaultalert.if(alert==null){alert=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);}}}publicAlarm(Parcelp){id=p.readInt();enabled=p.readInt()==1;hour=p.readInt();minutes=p.readInt();daysOfWeek=newDaysOfWeek(p.readInt());time=p.readLong();vibrate=p.readInt()==1;label=p.readString();alert=(Uri)p.readParcelable(null);silent=p.readInt()==1;//新增times=p.readInt();interval=p.readInt();}//Createsadefaultalarmatthecurrenttime.publicAlarm(){id=-1;Calendarc=Calendar.getInstance();c.setTimeInMillis(System.currentTimeMillis());hour=c.get(Calendar.HOUR_OF_DAY);minutes=c.get(Calendar.MINUTE);vibrate=true;daysOfWeek=newDaysOfWeek(0);alert=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);//新增times=10;interval=0;}publicStringgetLabelOrDefault(Contextcontext){if(label==null||label.length()==0){returncontext.getString(R.string.default_label);}returnlabel;}/**Daysofweekcodeasasingleint.*0x00:noday*0x01:Monday*0x02:Tuesday*0x04:Wednesday*0x08:Thursday*0x10:Friday*0x20:Saturday*0x40:Sunday*/staticfinalclassDaysOfWeek{privatestaticint[]DAY_MAP=newint[]{Calendar.MONDAY,Calendar.TUESDAY,Calendar.WEDNESDAY,Calendar.THURSDAY,Calendar.FRIDAY,Calendar.SATURDAY,Calendar.SUNDAY,};//BitmaskofallrepeatingdaysprivateintmDays;DaysOfWeek(intdays){mDays=days;}publicStringtoString(Contextcontext,booleanshowNever){StringBuilderret=newStringBuilder();//nodaysif(mDays==0){returnshowNever?context.getText(R.string.never).toString():"";}//everydayif(mDays==0x7f){returncontext.getText(R.string.every_day).toString();}//countselecteddaysintdayCount=0,days=mDays;while(days>0){if((days&1)==1)dayCount++;days>>=1;}//shortorlongform?DateFormatSymbolsdfs=newDateFormatSymbols();String[]dayList=(dayCount>1)?dfs.getShortWeekdays():dfs.getWeekdays();//selecteddaysfor(inti=0;i<7;i++){if((mDays&(1<<i))!=0){ret.append(dayList[DAY_MAP[i]]);dayCount-=1;if(dayCount>0)ret.append(context.getText(R.string.day_concat));}}returnret.toString();}privatebooleanisSet(intday){return((mDays&(1<<day))>0);}publicvoidset(intday,booleanset){if(set){mDays|=(1<<day);}else{mDays&=~(1<<day);}}publicvoidset(DaysOfWeekdow){mDays=dow.mDays;}publicintgetCoded(){return

溫馨提示

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

評(píng)論

0/150

提交評(píng)論