Android詳細學習筆記第一季_第1頁
Android詳細學習筆記第一季_第2頁
Android詳細學習筆記第一季_第3頁
Android詳細學習筆記第一季_第4頁
Android詳細學習筆記第一季_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一、Android學習第一一一環(huán)境搭建Android開發(fā)環(huán)境的搭建環(huán)境搭建需要①AndroidSDK②JDK③eclipse環(huán)境搭建開始:㈠將AndroidSDK與JDK解壓,最好路徑中不要出現(xiàn)漢字,然后配置環(huán)境變量,方便命令行操作㈡為eclipse(3.4.1)安裝開發(fā)Android插件AndroidADTHelp-->InstallNewSoftware輸入:/android/eclipse便會自動檢測出所需要安裝的東西,點擊install即可。㈢重啟eclipse,進行AndroidSDK的配置。Windows-->Preferences-->Android找到你解壓的AndroidSDK的路徑即可。㈣新建一個AndroidProject來驗證平臺是否搭建成功。注:我上面步驟走下來之后發(fā)現(xiàn)我在運行程序時,沒有AndroidVirtualDevices(AVD)的選項。這時可以在Windows-->AndroidSDKManager中找到你所需要安裝版本,進行安裝。搭建過程還是比較順利,加油二Android學習第二天識Activity昨天程序搭建成功以后,就可以開發(fā)跟運行Android應用程序了,因為Activity是開發(fā)中不可或缺的組成部分,所以要對Activity有所認識。以下兩點是需要注意的:(個人總結(jié))凡是覆寫得方法,在方法體中的第一行一定是super.XXX(),一定要先調(diào)用父類里的相應方法做必要的事情,再根據(jù)自己的需求去寫其他的代碼。如果是從頭學習安卓開發(fā),不一定要開發(fā)最新的版本,可以在較低版本(2.3.3)下進行開發(fā),然后在高版本(4.0)下進行編譯與運行,這樣可以提高代碼的適應能力,可以兼容高級版本。下面對我今天的學習進行個小結(jié):首先Android的四個重要部分①Activity一形象點就是一個應用程序的門面,我們在手機上看到的圖形界面Intent—它就像一個搬用工,用于Activity之間傳遞數(shù)據(jù),就像請求Service——這個是不可見的,是為整個應用程序提供服務支持的底層ContentProvider為應用程序提供數(shù)據(jù)的接口上面的描述我自己感覺也比較抽象,今天專門研究了Activity,終于守得云開見月明:首先進行以下學習之前需要對Android的工程項目目錄有一個總體的了解:-HelloAn.c±t-oid—-LEl"C-Hi5ex:=ufiple.Kel1o:=lhdj-oid+EHh=11ctAiiiiroi■!.jav:±+"?AtliIl-oid1.5白-色genEGefler=itedJ~avaFilas]wiba■zovn.ex:=uriple.Kel1o:=ltidj-o£■!由…llR-Jmvs.;■—-L^bassets-…參resB擊:-mvr:elLIe::==.■料弓lcctl.pn.g—=.1a>-onj_+!K_|m=iifl.xml—-L^3?v:=□_ue三:,..?國sirigs.xml:■-£71Atl?3±~oii^il:eltlIfest,xml[5]de£pei~ties自己總結(jié):src下是我們自己寫得程序;gen下是我們創(chuàng)建程序時系統(tǒng)自動生成的,切忌勿修改assets是一個資源庫,與res的區(qū)別是不會自動在R.java中自動生成idres是一個資源庫,與assets不同的是,每增加一個資源(圖片等),會自動在R.java中生成對應的idlayout用于存放布局文件,用來控制Activity的顯示格局string.xml中存放的一個一個鍵值對,Activity可以對其進行提取AndroidManifest.xml是系統(tǒng)比較重要的一個文件,存放Activity的注冊信息,每生成一個Activity就應該在這里注冊一個。以上是大概的敘述,不知道表述的清不清楚Activity學習筆記~~~Activity初步介紹(自己總結(jié))Activity是一個可見的,用于用戶跟應用程序交互,可放置多個控件的一個容器。自己感覺這個Activity的概念就像是我們開發(fā)網(wǎng)站的一個頁面,也是一個容器,只不過載體不同,一個電腦上面看,一個手機上看而已。Activity注意事項,自己總結(jié)一個Activity是一個java類,并且一定要繼承Activity類。當一個Activity第一運行時,就會運行onCreate()方法,所以要覆寫這個方法。每一個Activity都需要在AndroidManifest.xml中進行配置。為Activity添加必要控件(部分控件)的方法:在布局文件main.xml中進行添加,此時R.java會自動為該控件生成一個唯一的id,這時在Activity中就可以通過findViewByld(R.id.XXX)進行調(diào)用啦???然后你就可以做任何你想做的事情???對有面向?qū)ο笳Z言基礎的人來說,一看就明白,代碼就不用貼啦Activity與Intent形象點來說,Intent就是Activity之間的橋梁,當然也可以是其他的橋梁。今天我只學到了兩個Activity之間通過Intent對象來傳遞數(shù)據(jù)。Intent是一個對象,并且包含一組信息①Componentname指定要傳遞到哪個ActivityAction指定另一個Activity要做什么Data——■傳送的數(shù)據(jù)CategortyExtras——鍵值對,也是用來存儲數(shù)據(jù)進行傳遞Flags這里需要注意的是,這互相傳遞的Activity不一定非要在同一個項目工程內(nèi)。?四種基本控件的使用TextView②EditText③Button④Menu具體的添加方法很簡單,這里就不做演示啦,明兒上圖上程序???這里需要注意的是Menu的添加方法與其他三個有所不同:其他三個控件都是在對應的布局文件中進行添加,而添加Menu需要在Activity中覆寫一個方法onCreateOptionMenu(Menumenu),這樣一個菜單就被創(chuàng)建,但是要實現(xiàn)功能,則需要覆寫另一個方法onOptionItemSelected(MenuItemitem)為這個菜單中每個item進行功能的編寫。?Activity的生命周期Activity有七個有關(guān)生命周期的函數(shù),分別是:①onCreateonStart。nRestartonResumeonPauseonStoponDestory這里我只做個總結(jié),具體在什么時候調(diào)用什么網(wǎng)上的教程都比我說的清楚這里我覺得有兩點需要注意:

一、當一個程序啟動了后三個進程(onPause,onStop,onDestory),就有可能在系統(tǒng)資源不足時被kill掉。因為手機畢竟不是電腦,內(nèi)存有限,所以安卓系統(tǒng)會有自己內(nèi)部的算法來節(jié)省自己的資源。二、onDestory在兩種情況下可能被調(diào)用,1是在代碼中調(diào)用了finish()方法,2是當系統(tǒng)資源不足的時候。與Activity生命周期有必要聯(lián)系的還有一個TaskTask說白了就是一個存放Activity的堆棧,所以具有堆棧的特點——后進先出。咱們在手機中看到的永遠是處于堆棧最頂層的Activity,需要注意的是,Task中的堆棧沒有排序的功能。窗口形態(tài)的Activity—這個將是我們在以后開發(fā)中使用比較廣泛的一種Activity,就類似于彈出框,但是并不會完全遮擋住下層的Activityo使用窗口形態(tài)的Activity非常簡單,只需要在AndroidManifest.xml的對應Activity注冊代碼中加一個屬性:android:theme="@Android:style/Theme.Dialog"/>即可嘍???明天將要開始的是Activity布局的學習。其實安卓對于有java基礎的人還是比較容易上手的,加油三Android學習第三天三Android學習第三天Activity的布局步介紹今天總結(jié)下Activity相關(guān)布局的一些知識:Activity:簡單跟常用的布局分為兩種:Activity:簡單跟常用的布局分為兩種:①LinearLayout--線性布局②TableLayout--表格布局③RelativeLayout--相對布局(今后將會頻繁的使用到這個布局)下面來簡單總結(jié)下前兩種(線性/表格)布局當中常用到的一些屬性:android:id為指定的控件制定相應的idandroid:text指定控件中顯示的文本內(nèi)容,這里盡量使用@strings.**android:gravity指定控件中內(nèi)容的顯示位置,如居中等屬性android:textsize指定控件中字體的大小,單位pt(磅)等android:background指定控件的背景色,注意這里使用的是RGB命名法,如“#aa0000”android:layout_width指定控件的寬度android:layout_height指定控件的高度android:padding指定控件的內(nèi)邊距,注意這里也可以分上下左右分別設置android:sigleLinetrue/false,設置為true,則將控件中的內(nèi)容在同一行當中進行顯示android:weight指定每個控件所占的屏幕比例,如果一個屏幕有兩個控件,其中一個控件的該值設置為5,另一個設置為2,則第一個控件將占據(jù)整個屏幕的5/7,另一個控件則是2/7當然,我們可以使用布局嵌套的方式來實現(xiàn)更加復雜,更加漂亮的布局樣式,比方說LinearLayout中可以再次嵌套任意多的其他布局,TableLayout也是一樣,這里就不舉例子了,網(wǎng)上一搜一堆的其實熟悉網(wǎng)頁編寫,jsp、css之類的對嵌套不會陌生,跟網(wǎng)頁編程有異曲同工之妙下面來簡單總結(jié)下前兩種(相對)布局當中常用到的一些屬性:相對布局會依賴于其他控件的位置,相對前兩種布局操作會比較復雜。我們把相對布局中常用的控件分成了幾個組,便于記憶第一組:兩個控件上下左右的對齊屬性:(通過ID來指定對方控件)android:layout_below將該控件置于指定控件之下android:layout_above將該控件置于指定控件之上android:layout_toLeftO—將該控件的右邊緣和指定控件的左邊緣對齊android:layout_toRightOf將該控件的左邊緣和指定控件的右邊緣對齊第二組:兩個控件上下左右的對齊屬性:(通過ID來指定對方控件)android:layout_alignBottom將該控件的下邊緣與指定id的下邊緣對齊android:layout_alignLeft將該控件的左邊緣與指定id的左邊緣對齊android:layout_alignRight將該控件的右邊緣與指定id的右邊緣對齊android:layout_alignTop將該控件的上邊緣與指定id的上邊緣對齊第三組:與父控件對齊的屬性:(true/false兩個屬性值)android:layout_alignParentLeft將該控件的左邊緣與其父控件的左邊緣對齊android:layout_alignParentRight將該控件的右邊緣與其父控件的右邊緣對齊android:layout_alignParentBottom將該控件的下邊緣與其父控件的下邊緣對齊android:layout_alignParentTo將該控件的上邊緣與其父控件的上邊緣對齊第四組:居中屬性android:layout_centerInParent指定控件水平垂直都居中(14)android:layout_centerHorizontal指定控件水平居中(15)android:layout_centerVertical指定控件垂直居中這里大家應該會很疑惑,第一組跟第二組對齊看似相同,下面舉兩個例子:android:layout_toLeftOf控件一的左邊緣與控件二的右邊緣對齊android:layout_alignLeft控件二控件-控件一的左邊緣與控件二的左邊緣對齊看出來了吧,這兩組屬性有本質(zhì)的區(qū)別。在以后的使用中,大家根據(jù)需要選擇即可這些都是口頭上之說,如果大家要更深刻的了解這些屬性的作用,就自己動手試一試,這里就不舉例子了,只為大家做個總結(jié),一遍以后查閱???明兒見嘍?、Android學習第四一一JAVA基礎回顧這才學習Android的第四天,在程序中已經(jīng)遇到了JAVA中以前不常用的一些知識點,趕緊回顧復習一下,打下基礎這里就做個簡單的小結(jié):一、匿名內(nèi)部類?匿名內(nèi)部類說白了就是個沒有被命名的JAVA類在以下條件下使用匿名內(nèi)部類比較適合:只用到該類的一個實例時類在定義后被馬上用到類非常小(SUN推薦是在4行代碼以下)給類命名并不會導致你的代碼更容易被理解在使用匿名內(nèi)部類時,需要注意:匿名內(nèi)部類不能有構(gòu)造方法匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類匿名內(nèi)部類不能是public、protected>private>static只能創(chuàng)建匿名內(nèi)部類的一個實例一個匿名內(nèi)部類一定是在new之后,用其隱含實現(xiàn)一個接口或?qū)崿F(xiàn)一個類匿名內(nèi)部類為局部內(nèi)部類,所以局部內(nèi)部類的限制對其都生效具體的例子大家可以從網(wǎng)上看下,我這里只是大概的總結(jié)一下需要注意的東西。二、線程?線程說白了就是一個程序中不同的執(zhí)行路徑。線程跟進程的比較:

①每個進程都有獨立的代碼跟數(shù)據(jù)空間(進程的上下文),進程間得切換會有較大的開銷線程可以看做是輕量級的進程,同一個線程共享代碼跟數(shù)據(jù)空間,每個線程有獨立的運行棧和程序計數(shù)器(PC),線程切換的開銷小多進程:在操作系統(tǒng)中能同時運行多個任務(程序)多線程:在同一應用程序中有多個順序流同時執(zhí)行new一個新線程類出來一般會使用下面兩種方法的其中一個:一:繼承Thread類來創(chuàng)建一個新的線程,并重寫run方法二:實現(xiàn)Runnable方法這里需要注意的是:線程啟動:Thread.start()方法調(diào)用:run()這兩種方式的區(qū)別:其實真正要啟動一個新的線程,需要執(zhí)行start()方法;run()方法并沒有啟動一個新的線程,只是在當前線程下,暫停去執(zhí)行run方法中的方法體,然后再繼續(xù)執(zhí)行接下來的程序。這兩種方式的區(qū)別在今后也會詳加介紹五.Android學習第四天補充Android的常用控件五.Android學習第四天補充Android的常用控件一、RadioGroup和RadioButton單選按鈕二、Checkbox復選框

三、Toast提示框,會自動消失四、ProgressBar進度條工具五、ListView以列表形式將控件顯示出來下面就對這些內(nèi)容做個詳細的解釋:首先我們要注意在布局文件中對控件進行聲明不是必須的,這個在以后應用中需要動態(tài)生成一些控件的時候,我們就可以在Activity中進行控件聲明,這些以后項目中遇到我們再介紹。我們先來看RadioGroup與RadioButton的使用方法先來看看RadioGroup與RadioButton在main.xml中的聲明,如下圖中代碼:1E-sdiivitynun.■"strings.innL<?Kmlversion=^l.0nencoding=r,?>-<LirjarLayout<?Kmlversion=^l.0nencoding=r,?>-<LirjarLayoutxmlns:android=nhttp://s-chandroid:layout_width=rrflJI_pdrentlrandroid:1ayout_height=l__p^jrent?android:orisntation=vertr>android:id=d/r^diosroupMandroid:1ayoutwidth="svrdp_content?randroid:1ayout_he1ght=Frwr^paontcnt#android:orientalion=prvertisaJ”?^ndr'/<spJr/res/anc/roid^j

11

12

13

14

IS

lb

17101320■<RadioPut7t.onandroid:android:1ayout_width=content"android:Layout,height.-ent什android:test=rr(?s1&rl<RadioButtonandroid:id=*t?+id/ferns1&r,an^iroici:1ayout_width=content"android:Layout._hsigl'Lt=,T^raL-_content[android:tent=,T&strinc*/></RadioGroup>如下圖中代碼是為RadioGroup添加監(jiān)聽器:〃下來堊打區(qū)些撞件蜥是盆聽亮f&起一個匿窘⑶畛,為能U網(wǎng)定盅聽器r-adioGcoup.setOnCheckedChangeListe-ner(ii^urOnCh.'pcke<iChangeLi3tensf(>((5Qverridepiibl±<-v-r>Id(R^di*Gi?oupgr*upfink己扣厘己呂:{//I-uLn■Auto-^genaratedmet-hodstubj_f(in^le.^ecrd()==chacJc&cild)[System,cut.print1n(wmale-checked..-、..;U^DSet^ttJHE//Toast\elstIf(£amala.Id()==-cJiftckedld)tSystemroutrprintln('"femal-acheeked,r);"1我們再來看Checkbox的使用方法先來看看Checkbox在main.xml中的聲明,如下圖中代碼:<CheckBoxandroid:1(1=,rcT/swlin*arjdr^id:lay*ut_width=Twr3p_c^nte^trrandr&id:layoutheight=■content"android:tw(?strin-g/swln)"<CheckBoxandraid:id=”『彳_±<f/^ur511android:layout_width=TpzrspcontentFl|ancdroxd;layouthaxglilL-,rivi-apGOntaftt,Fandroid:teKt=Wstrin-gfrun*<CheckE-on□id:i4=門由占H"androld:layout_wi_dth=^p/rapconieut,rendfj1ayout_hsight=■S—p口。#七mjr亡”android:teHr■三%srringfread”如下圖中代碼是為Checkbox添加監(jiān)聽器:〃機gEG收莒與曲5添加i!5煲剽swim.s-etOnCheeke-dtChangeLi5t-eneuC-ompoLindBntt-on.OnCheck-e'dCh&ngeListener(){00vtrridfepublicvoidonCfiecfceiiChangedtCompouiidHiittoniiuttonVieu?^bg1-eahist{1£h^-ck^d){Syst-eaa.our,println(rswim"he^kei;}else{Systsn.^wc.prin^ln(r,Ewimunchecked『ProgressBar的使用如下代碼為水平進度條的聲明方法:<ProgressBarandroid:id="(?+土d/firstrrstyle=rr?andj7Ciid:attr/progressrStyleiforizontdIrrandroid:Layout_-width=111OOdlprrandroid:Layout_hsight=rrivrap_contentrr|android:visibility=Jrgone/>下圖為默認進度條的聲明方法:<ProgrsssEatfandroid:id=rrt?-Mc//secoric/rrstyle=rrd:<attr/progrossB3T^tyl白rrandroid:1ayout._width=rrivr^p_contentrrandroid:l^yout._hsight=rrDZjrapcontentrrandroid:visibility=rtqone"/>可以一眼看出,style屬性的設置決定了進度條的樣式。如下代碼即為實現(xiàn)這兩個進度條的Activity類ProgressBarTgress;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ProgressBar;publicclassProgressBarTestextendsActivity(//聲明變量privateProgressBarfirst=null;privateProgressBarsecond=null;privateButtonbutton=null;privateinti=0;@OverridepublicvoidonCreate(BundlesavedInstanceState)(//這兩句一般都要有super.onCreate(savedInstanceState);setContentView(R.layout.main);//通過findViewById獲得控件對象first=(ProgressBar)findViewById(R.id.first);second=(ProgressBar)findViewById(R.id.second);button=(Button)findViewById(R.id.button);//為button設置監(jiān)聽器button.setOnClickListener(newButtonListener());}//監(jiān)聽器內(nèi)部類@OverridepublicvoidonClick(Viewv)(//TODOAuto-generatedmethodstubif(i==0)(//設置進度條為可見,如果寫0的話,不好看,View.VISIBLE就能讓人一看就知道是設置為可見first.setVisibility(View.VISIBLE);second.setVisibility(View.VISIBLE);}elseif(i<first.getMax())(//設置進度條的最大值first.setMax(200);//設置進度條的位置first.setProgress(i);//設置第二進度條的位置first.setSecondaryProgress(i+10);//因為默認的進度條是無法顯示進行的狀態(tài)的,所以second不用設置}else(first.setVisibility(View.GONE);second.setVisibility(View.GONE);}i=i+10;}}}如下圖為運行后的結(jié)果:璃向進度奈與默認進度奈ProgressBarTest但是在開發(fā)應用程序的時候,比如下載這些功能是不能寫在Activity中的,有可能導致整個Activity長時間無響應或者報錯,用戶體驗較差,所以Handler就應運而生啦?以后將會學習到在使用ListView的例子中,需要注意這里繼承的是Activity的子類ListActivity。六、Android學習第五天Handler的使用注意:有很多功能是不能寫在Activity中的,例如說下載或者處理大量的數(shù)據(jù)等,如果這類操作寫在Activity中,就有可能導致整個Activity無響應甚至報錯,這樣用戶體驗就會比較差。所以此類功能應該獨立于Activity,且互不干擾,所以Handler就應運而生了。Handler提供了一個異步的消息處理的方案,將具體復雜的操作都放在一個線程中取處理。創(chuàng)建一個Handler對象的基本步驟如下:(一)點擊一個按鈕,調(diào)用Handler的post方法,將要執(zhí)行的線程對象添加到隊列當中去。將要執(zhí)行的操作寫在線程對象的run()方法當中。(三)如果想要循環(huán)執(zhí)行,則可以在run方法內(nèi)部執(zhí)行Handler的postDelayed或者post方法,將線程反復加入到隊列當中。下面是使用Handler的一個簡單的例子:packagemickey.handler;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;publicclassHandlerTestextendsActivity(//聲明兩個按鈕控件privateButtonbegin=null;privateButtonend=null;@OverridepublicvoidonCreate(BundlesavedInstanceState)(super.onCreate(savedInstanceState);setContentView(R.layout.main);//根據(jù)控件的ID得到代表控件的對象,并為這兩個按鈕設置相應的監(jiān)聽器begin=(Button)findViewById(R.id.begin);begin.setOnClickListener(newStartButtonListener());end=(Button)findViewById(R.id.end);end.setOnClickListener(newEndButtonListener());//為start按鈕設置的監(jiān)聽器classStartButtonListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewv)(//無延遲,直接加入消息隊列中,此時消息隊列中只有此一個線程//調(diào)用handler的post方法,將要執(zhí)行的線程對象添加到隊列當中去handler.post(updateThread);}}//為end按鈕設置的監(jiān)聽器classEndButtonListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewv)(handler.removeCallbacks(updateThread);}}//創(chuàng)建一個Handler對象Handlerhandler=newHandler();//一個線程類,將要執(zhí)行的操作寫在線程對象的run方法當中RunnableupdateThread=newRunnable()(@Overridepublicvoidrun()(System.out.println("run");//在run方法內(nèi)發(fā)執(zhí)行postDelayed或者post方法,延遲三秒,將線程加入隊列handler.postDelayed(updateThread,3000);}};}但是我們看到了,上面的例子中我們只是調(diào)用了線程的run()方法,并沒用調(diào)用Thread的start()方法來重啟一個線程,因此,上面這個例子中,實際上我們并沒有重啟一個新的線程,從始至終Handler都是和Activity在同一線程中的。所以如果我們在使用Handler時,要重啟一個線程,使用Handler.post(Threadthread)只是調(diào)用了該線程的run方法,我們只有使用java中重啟線程的方法來重啟一個新的線程,即調(diào)用Thread.start()方法,這兒不再多說七,Android學習第六天一SQLite與文件下載SQLiteSQLite是Android內(nèi)嵌的一個非常小的關(guān)系型數(shù)據(jù)庫。總結(jié):當我們操作在學習SQLite當中,遇到兩個問題:如果我們在搭建Android環(huán)境成功后,在命令行中輸入adb后沒有反應,可以按一下操作來做:第一步:將platform-tools的目錄加入path環(huán)境變量的配置中;第二步:將platform-tools下的adb.exe以及兩個dll文件拷貝到tools目錄下第三步:重啟命令行,輸入adb,搞定(二)結(jié)果按照如上配置path變量后,輸入adbshell命令后,提示Devicenotfound.報這個錯的原因,原來是因為沒有連接到手機所以報錯,在開發(fā)Android中,是因為Android虛擬機沒有運行而報錯,我們只要在eclipse中將Android虛擬機運行起來即可訪問。根據(jù)mars老師說,SQLite在開發(fā)過程中會出現(xiàn)一些比較古怪的問題,所以建議不要再SQLite中存儲過多的數(shù)據(jù),不要太過于依賴SQLite。.程序調(diào)試(一)可以適量的加入一些System.out語句,用來檢測程序的運行情況(二)使用日志輸入(Log)——推薦使用這種規(guī)范的做法.文件下載要實現(xiàn)下載文件的功能,一般步驟為:(一)創(chuàng)建一個HttpURLConnection對象URLurl=newURL("http://......");HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();(二)獲得InputStream對象urlConn.getInputStream();(三)訪問網(wǎng)絡的權(quán)限android:permission.INTERNET訪問手機SDCARD的步驟:(一)得到當前設備SD卡的目錄Environment.getExternalStorageDirectory();(二)訪問SD卡的權(quán)限android.permission.WRITE_EXTERNAL_STORAGE遇到的問題:當寫好下載程序,卻怎么也下載不成功,原來是忘記了最最重要的一步:切忌最后要在Manifest.xml中添加以下兩行代碼,賦予權(quán)限:<!--下面這兩句在下載中必不可少,第一個是賦予了下載的權(quán)限,第二個是賦予了寫入SD卡的權(quán)限--><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>八,Android學習第七一一XML文件解析方法XML文件:extensiblemarkuplanguage定義:用于標記電子文件使其具有結(jié)構(gòu)性的標記語言,可以用來標記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對自己的標記語言進行定義的源語言。解析XML的方式:SAX——SimpleAPIforXML,既是一種接口,也是一個軟件包采用的是事件驅(qū)動,也就是它解析XML文檔并需要解析完整個文檔,在解析過程中,它會判斷解析出的當前字符是否符合XML中的某部分,如果符合則觸發(fā)事件,如果不符合則觸發(fā)相應的回調(diào)函數(shù)。此回調(diào)函數(shù)封裝在ContentHandler接口中。。因為ContentHandler被實現(xiàn)后會被強制實現(xiàn)很多無用方法,故不用此接口,我們繼承DefaultHandler類,因為其實現(xiàn)了ContentHandler中一部分我們需要的方法,省去了一些我們無用的方法哦。所以選擇用這個。缺點是,如果要使用它去添加或者刪除一些內(nèi)容會比較費勁的。DOMDocumentObjectModel此種解析方式是把已知的XML文檔全部載入到內(nèi)存中,并將其存儲為dom樹,根據(jù)dom結(jié)點與子結(jié)點之間的關(guān)系來解析文件,如果文件過大的話,解析會很耗時而且很耗資源。這里主要說明下SAX解析XML文件的過程:(一)創(chuàng)建事件處理程序(二)創(chuàng)建SAX解析器(三)將事件處理程序分配給解析器(四)對文檔進行解析,將每個事件發(fā)送給處理程序九、Android學習第/——廣播機制與WIFI網(wǎng)絡操作今天熟悉了Android中的廣播機制與WIFI網(wǎng)絡的一些基本操作,總結(jié)如下:Android的廣播機制我們知道廣播機制中,發(fā)送方不會關(guān)心接收方時候接收到數(shù)據(jù)或者如何去處理數(shù)據(jù)。這里總結(jié)下Android中BroadcastReceiver的注冊方法:(一)在應用程序中進行注冊(二)在Manifest.xml中進行注冊如果在Manifest.xml中進行注冊,那么該應用程序無論是開還是關(guān),該應用都會收到廣播事件。例如:監(jiān)聽電池耗電量等。顯而易見,這種注冊方法并不是我們想要的。如果在應用程序中進行注冊,就會在Activity可見時進行注冊,不可見時就會取消注冊。在Activity中進行注冊的代碼如下:注冊:registerReceiver(BroadcastReceiverreceiver,IntentFilterfilter);取消注冊:unregisterReceiver(BroadcastReceiverreceiver);如果一個BroadcastReceiver用于更新UI,那么通常會使用在代碼中注冊的方法。WIFI基本操作WIFI應該說是Android中比較重要的一塊了,用Android系統(tǒng)手機的童鞋們,應該每天都在接觸WIFI。今天熟悉了如何對WIFI網(wǎng)卡進行基本的操作,包括打開,關(guān)閉,檢測網(wǎng)卡狀態(tài)等等。WIFI網(wǎng)卡的狀態(tài)是有一系列整型常量來表示的,如下:TOC\o"1-5"\h\z(一)WIFI_STATE_DISABLEDWIFI網(wǎng)卡不可用1(二)WIFI_STATE_DISABLINGWIFI網(wǎng)卡正在關(guān)閉0(三)WIFI_STATE_ENABLEDWIFI網(wǎng)卡可用狀態(tài)——3(四)WIFI_STATE_ENABLINGWIFI網(wǎng)卡正在打開2(五)WIFI_STATE_UNKNOWN未知網(wǎng)卡狀態(tài)——4大家注意到了,每個狀態(tài)后我寫了一個數(shù)字,我們知道這些都是整型常量,所以后面的數(shù)字就是這些常量對應的值,如果大家在程序中,輸出當前當卡的狀態(tài),就會看到這些數(shù)值,對應著某種網(wǎng)卡的狀態(tài)。操作AndroidWIFI網(wǎng)卡狀態(tài)中,比較重要的是操作WIFI網(wǎng)卡需要的權(quán)限,這個有很多。我們在AndroidAPI中可以找到Manifest.permission類,就可以看到各種權(quán)限了。這里貼出WIFI的一個例子,WIFI的這個例子只能在真機上面測試,因為模擬器沒有WIFI這樣的功能。這里比較重要的有三個文件:WIFITestActivity.javamain.xmlManifest.xml下面來看看這三個文件中的具體代碼:main.xml<?xmlversion="1.0"encoding="utf-8”?><LinearLayoutxmlns:android="/apk/res/android”android:layout_width="fill_parent”android:layout_height="fill_parent”android:orientation="vertical"><TextViewandroid:layout_width="fill_parent”android:layout_height="wrap_content”android:text="WIFI”/><Buttonandroid:id="@+id/open”android:layout_width="fill_parent”android:layout_height="wrap_content”android:text="打開wifi/><Buttonandroid:id="@+id/close”android:layout_width="fill_parent”android:layout_height="wrap_content”android:text="關(guān)閉wifi"/><Buttonandroid:id="@+id/check"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="檢查wifi狀態(tài)”/></LinearLayout>WIFITestActivity.javapackagemickey.wifi;importandroid.app.Activity;importandroid.content.Context;.wifi.WifiManager;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassWIFITestActivityextendsActivity(//三個控件對象privateButtonopen=null;privateButtonclose=null;privateButtoncheck=null;//我們知道要對網(wǎng)卡進行操作,就需要WifiManager這個類privateWifiManagerwifiManager=null;@OverridepublicvoidonCreate(BundlesavedInstanceState)(super.onCreate(savedInstanceState);setContentView(R.layout.main);//得到控件對象的實例,并且為他們設置相應的監(jiān)聽器open=(Button)findViewById(R.id.open);open.setOnClickListener(newOpenWifiListener());close=(Button)findViewById(R.id.close);close.setOnClickListener(newCloseWifiListener());check=(Button)findViewById(R.id.check);check.setOnClickListener(newCheckWifiListener());}//為打開網(wǎng)卡按鈕設置監(jiān)聽器classOpenWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//內(nèi)部類如果直接使用this的話代表的是它自己,所以要用WIFITestActivity.this//得到WIFIManager對象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);//setWifiEnabled(true)打開wifi網(wǎng)卡wifiManager.setWifiEnabled(true);//得到當前網(wǎng)卡的狀態(tài),這兒輸出的是一個整型常量System.out.println("當前網(wǎng)卡的狀態(tài)為:"+wifiManager.getWifiState());//彈出一個Toast提示用戶當前wifi網(wǎng)卡的狀態(tài)是什么,記得調(diào)用show方法Toast.makeText(WIFITestActivity.this,”當前wifi網(wǎng)卡的狀態(tài)為"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}//為關(guān)閉網(wǎng)卡按鈕設置監(jiān)聽器classCloseWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//得到WIFIManager對象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);//設置網(wǎng)卡不可用wifiManager.setWifiEnabled(false);System.out.println("當前網(wǎng)卡的狀態(tài)為:"+wifiManager.getWifiState());Toast.makeText(WIFITestActivity.this,”當前wifi網(wǎng)卡的狀態(tài)為"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}//為檢查網(wǎng)卡狀態(tài)按鈕設置監(jiān)聽器classCheckWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//得到WIFIManager對象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);System.out.println("當前網(wǎng)卡的狀態(tài)為:"+wifiManager.getWifiState());Toast.makeText(WIFITestActivity.this,”當前wifi網(wǎng)卡的狀態(tài)為"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}}Manifest.xml<?xmlversion="1.0"encoding="utf-8”?><manifestxmlns:android="/apk/res/android"package="mickey.wifi”android:versionCode="1"android:versionName="1.0”><uses-sdkandroid:minSdkVersion="10”/><applicationandroid:icon="@drawable/ic_launcher”android:label="@string/app_name"><activityandroid:label="@string/app_name”android:name=".WIFITestActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application><!--這四個權(quán)限一定要有,否則系統(tǒng)不會賦予用戶操作網(wǎng)絡及網(wǎng)卡的權(quán)限--><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/></manifest>然后童鞋們,把基于Android系統(tǒng)的手機用USB數(shù)據(jù)線連接到電腦,記得把USB調(diào)試打開,然后運行你的程序,就會自動在手機上運行這個程序啦?十、Android學習第九小結(jié)通過這段時間的學習,今晚上來做個小小的總結(jié)???最早之前我們就了解到,Android四個重要的部分:一、Activity——門面,就是我們看到的用戶界面二、Intent——在整個應用程序間傳送數(shù)據(jù)三、Service——不可見,為整個應用程序提供一個服務支持四、ContentProvider為應用程序提供數(shù)據(jù)的接口至此,這四個重要的部分我們都已經(jīng)有了初步的認識。但是并不是每一個Android應用程序都需要這四個部分,這不是必需的。某些時候,我們只需要這四種中的幾種組合成我們的應用。Activity至此,Activity我們已經(jīng)很清楚了,需要注意的是Activity的使用,需要在Manifest.xml中進行注冊。IntentAndroid中提供了Intent機制來協(xié)助應用間的交互與通訊,Intent負責對應用中一次操作的動作、數(shù)據(jù)、附加數(shù)據(jù)進行描述,Android則根據(jù)這些Intent的描述,負責找到相應的組件,將Intent傳遞給調(diào)用的組件,并完成對組件的調(diào)用。Intent不僅可用于應用程序之間,也可用于應用程序內(nèi)部的Activity/Service之間的交互。因此,Intent在這里起的是一個媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。理解Intent的關(guān)鍵之一是理解Intent的兩種基本用法:1、顯式的Intent即在構(gòu)造Intent對象的時候就指定接受者2、隱式的Intent一在構(gòu)造Intent對象時,并不知道也并不關(guān)心接受者是誰,有利于降低發(fā)送者與接受者之間的耦合。以下是Intent幾種常用的用法:IntentintentOne=newIntent(IntentActivity.this,ResultActivity.class);IntentActivity.this.startActivity(intentOne);IntentintentTwo=newIntent(IntentActivity.this,ResultActivity.class);//把數(shù)據(jù)放到Bundle中,進行傳遞Bundlebundle=newBundle();bundle.putString("name”,"chenzheng");//intent.putExtra可以用來放鍵值對intentTwo.putExtras(bundle);IntentActivity.this.startActivity(intentTwo);—//對于數(shù)據(jù)接收BundleresultBundle=getIntent().getExtras();Stringname=resultBundle.getString("name");IntentresultIntent=getIntent();BundleresultBundleTwo=newBundle();resultBundleTwo.putString("name","ThisisfromShowMsg");resultIntent.putExtras(resultBundleTwo);setResult(RESULT_OK,resultIntent);ServiceService是一個應用程序組件Service沒有圖形化界面Service通常用來處理一些耗時比較長的操作,例如下載,播放MP3文件等操作??梢允褂肧ervice更新ContentProvider,發(fā)送Intent以及啟動系統(tǒng)通知等等。我們要注意,Service不是一個單獨的進程,也不是一個線程。這里別忘記寫完一個Service要去Manifest.xml中進行注冊。ContentProvider應用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件中、SQL數(shù)據(jù)庫中、甚至是任何有效的設備中。當你想將你的數(shù)據(jù)與其他應用共享時,ContentProvider就將變的很有用了。一個ContentProvider類實現(xiàn)了一組標準的方法,從而能夠?qū)⑵渌膽帽4婊蛘咦x取此ContentProvider處理的各種數(shù)據(jù)類型。Toast俺一直對這個Toast很有興趣,所以從網(wǎng)上找了個例子自己練習了下,與大家分享:下面的例子一共有五種Toast的用法第一種:默認樣式//默認的Toast樣式Toast.makeText(ToastActivity.this,”默認Toast樣式”,Toast.LENGTH_SHORT).show();運行結(jié)果如下:瑩■±53Tna^tTest113DToast買例戳認樣式月定義M示位萱樣式帶圖片樣式完全旨定義樣式其他線程祥式我認To第甘學式第二種:自定義顯示位置//自定義位置的ToastToasttoast=Toast.makeText(ToastActivity.this,"自定義位置的Toast",Toast.LENGTH_LONG);//自定義Toast的顯示位置toast.setGravity

溫馨提示

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

評論

0/150

提交評論