




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android應(yīng)用開(kāi)發(fā)2010年8月13日Android平臺(tái)架構(gòu)Android環(huán)境配置和開(kāi)發(fā)Android應(yīng)用程序構(gòu)成如何開(kāi)發(fā)一個(gè)例子目錄Android平臺(tái)架構(gòu)JNIJAVAC/匯編簡(jiǎn)介L(zhǎng)inux核心:Android依賴Linux2.6來(lái)提供核心的效勞,例如存儲(chǔ)管理、進(jìn)程(Process)管理等AndroidRuntime:Java語(yǔ)言層級(jí)的VirtualMachineLibraries:Android里已經(jīng)提供的C/C++組件。例如,SQLite、OpenGL3D等。應(yīng)用框架(ApplicationFramework,):這是結(jié)合Applications和Libraries的主架構(gòu),讓Libraries組件能不斷地為Applications所重復(fù)使用應(yīng)用程序(Applications):根據(jù)用戶的期望而將AF的組件及Libraries組件組合而成的效勞。用漢堡比喻Android平臺(tái)架構(gòu)Android環(huán)境配置和開(kāi)發(fā)Android平臺(tái)架構(gòu)Android應(yīng)用程序構(gòu)成如何開(kāi)發(fā)一個(gè)例子目錄如何安裝AndroidSDK和Eclipse插件所需開(kāi)發(fā)環(huán)境:JDK5或JDK6(僅有JRE不夠)Eclipse3.5(galileo)下載ADT的Eclipse插件://dl.google安裝Eclipse插件(ADT)啟動(dòng)Eclipse,選擇Help>InstallNewSoftware,在出現(xiàn)的對(duì)話框里,點(diǎn)擊Add按鈕,在對(duì)話框的name一欄輸入“ADT”,然后點(diǎn)擊Archive...,瀏覽和選擇已經(jīng)下載的ADT插件壓縮文件。點(diǎn)擊OK.。返回可用軟件的視圖,你會(huì)看到這個(gè)插件,然后選擇DeveloperTools(會(huì)選中下面的“AndroidDeveloperTools”和“AndroidEditors“),點(diǎn)擊Next,最后重啟Eclipse。下載AndroidSDK:://dl.google/android/android-sdk_r04-windows.zip下載完SDK后,把.zip文件解壓到你電腦上適宜位置。啟動(dòng)Eclipse,選擇window->preferences,在翻開(kāi)的視圖左邊點(diǎn)擊android,在右邊的SDKLocation中選擇AndroidSDK所在位置。開(kāi)發(fā)第一個(gè)Android應(yīng)用
翻開(kāi)Eclipse,新建工程(點(diǎn)擊FileNewProject),在工程列表中展開(kāi)Android目錄,選擇AndroidProject,如以下圖:開(kāi)發(fā)第一個(gè)Android應(yīng)用開(kāi)發(fā)第一個(gè)Android應(yīng)用點(diǎn)擊”finish”即可完成工程的創(chuàng)立,創(chuàng)立后的工程已經(jīng)是一個(gè)可運(yùn)行的Android應(yīng)用,我們可以通過(guò)下面方式運(yùn)行此應(yīng)用:點(diǎn)擊工具欄上形狀的虛擬設(shè)備管理器〔簡(jiǎn)稱“AVD“〕,如下:開(kāi)發(fā)第一個(gè)Android應(yīng)用在翻開(kāi)的虛擬設(shè)備管理器中創(chuàng)立一個(gè)虛擬:開(kāi)發(fā)第一個(gè)Android應(yīng)用在工程上右鍵點(diǎn)擊runasAndroidapplication,如以下圖:Android應(yīng)用程序架構(gòu)src/java原代碼存放目錄gen/自動(dòng)生成目錄gen目錄中存放所有由Android開(kāi)發(fā)工具自動(dòng)生成的文件。目錄中最重要的就是R.java文件。這個(gè)文件由Android開(kāi)發(fā)工具自動(dòng)產(chǎn)生的。Android開(kāi)發(fā)工具會(huì)自動(dòng)根據(jù)你放入res目錄的xml界面文件、圖標(biāo)與常量,同步更新修改R.java文件。正因?yàn)镽.java文件是由開(kāi)發(fā)工具自動(dòng)生成的,所以我們應(yīng)防止手工修改R.java。R.java在應(yīng)用中起到了字典的作用,它包含了界面、圖標(biāo)、常量等各種資源的id,通過(guò)R.java,應(yīng)用可以很方便地找到對(duì)應(yīng)資源。另外編繹器也會(huì)檢查R.java列表中的資源是否被使用到,沒(méi)有被使用到的資源不會(huì)編繹進(jìn)軟件中,這樣可以減少應(yīng)用在占用的空間。res/資源(Resource)目錄在這個(gè)目錄中我們可以存放應(yīng)用使用到的各種資源,如xml界面文件,圖片或數(shù)據(jù)。具體請(qǐng)看ppt下方備注欄。AndroidManifest.xml功能清單文件這個(gè)文件列出了應(yīng)用程序所提供的功能,在這個(gè)文件中,你可以指定應(yīng)用程序使用到的效勞(如效勞、互聯(lián)網(wǎng)效勞、短信效勞、GPS效勞等等)。另外當(dāng)你新添加一個(gè)Activity的時(shí)候,也需要在這個(gè)文件中進(jìn)行相應(yīng)配置,只有配置好后,才能調(diào)用此Activity。perties工程環(huán)境信息,一般是不需要修改此文件目錄Android環(huán)境配置和開(kāi)發(fā)Android平臺(tái)架構(gòu)Android應(yīng)用程序構(gòu)成如何開(kāi)發(fā)一個(gè)例子Android應(yīng)用程序構(gòu)成ActivityServiceBroadcastReceiverContentProviderIntentActivityAvisualuserinterface通過(guò)view管理UI每一個(gè)有用戶界面的應(yīng)用至少包含一個(gè)activity一個(gè)應(yīng)用可以有多個(gè)activity,其中一個(gè)作為mainactivity用于啟動(dòng)顯示Activity通過(guò)startActivity或startActivityForResult啟動(dòng)另外的activityActivity生命周期Activity通過(guò)onCreate被創(chuàng)立當(dāng)一個(gè)activity失去焦點(diǎn),該activity將進(jìn)入pause狀態(tài),系統(tǒng)在內(nèi)存缺乏時(shí)會(huì)將其終止當(dāng)一個(gè)activity被另一個(gè)activity覆蓋,該activity將進(jìn)入stop狀態(tài),系統(tǒng)在需要內(nèi)存的時(shí)候會(huì)將其終止Intent類似于消息、事件通知Intent構(gòu)成:action、category、dataActivity、Service、broadcastreceiver之間的橋梁IntentactivityserviceBroadcastreceiverIntent兩類intent:顯式:指定具體的目標(biāo)組件處理startActivity(newIntent(ActivityLifecycle.this,AnotherActivity.class));隱式:由系統(tǒng)接受并決定如何處理startActivity(newIntent(Intent.ACTION_DIAL));在AndroidManifest.xml中定義activity、service、broadcastreceiver接受的intentIntentIntentfilter:action、category、dataframeworkComponentnameActionDataCategoryintentcomponentactivityserviceBroadcastreceiver實(shí)例action--DIALdata--tel:01038639592action--VIEWdata--://googleService沒(méi)有UI,啟動(dòng)之后一直運(yùn)行于后臺(tái)例子:音樂(lè)播放器與應(yīng)用程序的其他模塊〔例如activity〕一同運(yùn)行于主線程中通過(guò)startService或bindService創(chuàng)立Service通過(guò)stopService或stopSelf終止Service一般的,在activity中啟動(dòng)和終止serviceService生命周期Context.stopService()Serivce.stopSelf()Context.startService()Context.bindService()效勞--ServiceAndroid中的效勞和windows中的效勞是類似的東西,效勞一般沒(méi)有用戶操作界面,它運(yùn)行于系統(tǒng)中不容易被用戶覺(jué)察,可以使用它開(kāi)發(fā)如監(jiān)控之類的程序。效勞的開(kāi)發(fā)比較簡(jiǎn)單,如下:第一步:繼承Service類publicclassSMSServiceextendsService{}效勞--Service第二步:在AndroidManifest.xml文件中的<application>節(jié)點(diǎn)里對(duì)效勞進(jìn)行配置:<serviceandroid:name=".SMSService"/>效勞不能自己運(yùn)行,需要通過(guò)調(diào)用Context.startService()或Context.bindService()方法啟動(dòng)效勞。這兩個(gè)方法都可以啟動(dòng)Service,但是它們的使用場(chǎng)合有所不同。使用startService()方法啟用效勞,調(diào)用者與效勞之間沒(méi)有關(guān)連,即使調(diào)用者退出了,效勞仍然運(yùn)行。使用bindService()方法啟用效勞,調(diào)用者與效勞綁定在了一起,調(diào)用者一旦退出,效勞也就終止。如果打算采用Context.startService()方法啟動(dòng)效勞,在效勞未被創(chuàng)立時(shí),系統(tǒng)會(huì)先調(diào)用效勞的onCreate()方法,接著調(diào)用onStart()方法。如果調(diào)用startService()方法前效勞已經(jīng)被創(chuàng)立,屢次調(diào)用startService()方法并不會(huì)導(dǎo)致屢次創(chuàng)立效勞,。采用startService()方法啟動(dòng)的效勞,只能調(diào)用Context.stopService()方法結(jié)束效勞,效勞結(jié)束時(shí)會(huì)調(diào)用onDestroy()方法。效勞--Service如果打算采用Context.bindService()方法啟動(dòng)效勞,在效勞未被創(chuàng)立時(shí),系統(tǒng)會(huì)先調(diào)用效勞的onCreate()方法,接著調(diào)用onBind()方法。這個(gè)時(shí)候調(diào)用者和效勞綁定在一起,調(diào)用者退出了,系統(tǒng)就會(huì)先調(diào)用效勞的onUnbind()方法,接著調(diào)用onDestroy()方法。如果調(diào)用bindService()方法前效勞已經(jīng)被綁定,屢次調(diào)用bindService()方法并不會(huì)導(dǎo)致屢次創(chuàng)立效勞及綁定(也就是說(shuō)onCreate()和onBind()方法并不會(huì)被屢次調(diào)用)。如果調(diào)用者希望與正在綁定的效勞解除綁定,可以調(diào)用unbindService()方法,調(diào)用該方法也會(huì)導(dǎo)致系統(tǒng)調(diào)用效勞的onUnbind()-->onDestroy()方法。效勞--Service效勞常用生命周期回調(diào)方法如下:onCreate()該方法在效勞被創(chuàng)立時(shí)調(diào)用,該方法只會(huì)被調(diào)用一次,無(wú)論調(diào)用多少次startService()或bindService()方法,效勞也只被創(chuàng)立一次。onDestroy()該方法在效勞被終止時(shí)調(diào)用。與采用Context.startService()方法啟動(dòng)效勞有關(guān)的生命周期方法onStart()只有采用Context.startService()方法啟動(dòng)效勞時(shí)才會(huì)回調(diào)該方法。該方法在效勞開(kāi)始運(yùn)行時(shí)被調(diào)用。屢次調(diào)用startService()方法盡管不會(huì)屢次創(chuàng)立效勞,但onStart()方法會(huì)被屢次調(diào)用。與采用Context.bindService()方法啟動(dòng)效勞有關(guān)的生命周期方法onBind()只有采用Context.bindService()方法啟動(dòng)效勞時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與效勞綁定時(shí)被調(diào)用,當(dāng)調(diào)用者與效勞已經(jīng)綁定,屢次調(diào)用Context.bindService()方法并不會(huì)導(dǎo)致該方法被屢次調(diào)用。onUnbind()只有采用Context.bindService()方法啟動(dòng)效勞時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與效勞解除綁定時(shí)被調(diào)用。采用startService()啟動(dòng)效勞采用Context.startService()方法啟動(dòng)效勞的代碼如下:publicclassHelloActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){......Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewv){ Intentintent=newIntent(HelloActivity.this,SMSService.class); startService(intent); }});}}采用bindService()啟動(dòng)效勞采用Context.startService()方法啟動(dòng)效勞的代碼如下:publicclassHelloActivityextendsActivity{ServiceConnectionconn=newServiceConnection(){ publicvoidonServiceConnected(ComponentNamename,IBinderservice){ } publicvoidonServiceDisconnected(ComponentNamename){ }};@OverridepublicvoidonCreate(BundlesavedInstanceState){Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewv){ Intentintent=newIntent(HelloActivity.this,SMSService.class); bindService(intent,conn,Context.BIND_AUTO_CREATE); //unbindService(conn);//解除綁定 }});}}何為Contentprovider什么是Contentprovider?ContentProvider是Android應(yīng)用程序的四大組成局部之一是android中的跨應(yīng)用訪問(wèn)數(shù)據(jù)機(jī)制為何需要contentprovider?Android中每一個(gè)app的資源是私有的app通過(guò)contentprovider和其他app共享私有數(shù)據(jù)如何使用contentprovider通過(guò)contentresolver訪問(wèn)Context.getContentResolver()appContentResolverContentProviderAContentProviderBContentResolverContentResolverappapp如何使用contentproviderURI定位資源content://contacts/people類似關(guān)系數(shù)據(jù)庫(kù)的訪問(wèn)方式以二維數(shù)據(jù)表的格式暴露數(shù)據(jù),缺省都包含_id字段delete(Uri
url,
Stringwhere,
String[]
selectionArgs)insert(Uri
url,
ContentValues
values)query(Uri
uri,
String[]
projection,
String
selection,
String[]
selectionArgs,
String
sortOrder)update(Uri
uri,
ContentValues
values,
String
where,
String[]
selectionArgs)定義自己的contentproviderAndroid的存儲(chǔ)一般的,應(yīng)用程序的數(shù)據(jù)〔包括文件〕都是私有的四種持久存儲(chǔ)方式Preferences——類似properties,xml文件FilesDatabase——SQLiteNetworkBroadcastreceiver接收和處理android的播送消息Android的播送機(jī)制系統(tǒng)事件——例如變換時(shí)區(qū)、電量低等應(yīng)用程序發(fā)出播送消息:sendBroadCast播送消息:intentandroidappBroadcastreceiverSendbroadcast創(chuàng)立BroadcastReceiver實(shí)現(xiàn)一個(gè)BroadcastReceiverpublicclassMyAndroidReceiverextendsBroadcastReceiveroverrideonReceive(Contextcontext,IntentsIntents)注冊(cè)BroadcastReceiver在AndroidManifest.xml文件當(dāng)中進(jìn)行注冊(cè)在代碼當(dāng)中直接進(jìn)行注冊(cè)<receiverAndroid:name=“MyAndroidReceiver"><Intents-filter><actionAndroid:name=”com.eoeAndroid.action.NEW_BROADCAST”/></Intents-filter></receiver>IntentsFilterfilter=newIntentsFilter(NEW_BROADCAST);MyAndroidReceiverMyAndroidReceiver=newMyAndroidReceiver();registerReceiver(MyAndroidReceiver,filter);Broadcastreceiver生命周期Broadcastreceiver對(duì)象在onReceive返回后被銷毀onReceive中不適合處理異步過(guò)程。例如彈出對(duì)話框與用戶交互,可使用消息欄替代。Android權(quán)限控制在AndroidManifest.xml中描述一個(gè)app的權(quán)限例如:<manifestxmlnsapk/res/android"package="com.android.app.myapp"><uses-permissionandroid:name="android.permission.RECEIVE_SMS"/></manifest>權(quán)限舉例(參考android.Manifest.permission)
權(quán)限名稱權(quán)限描述接收短信android.permission.RECEIVE_SMS撥打電話android.permission.CALL_PHONE系統(tǒng)啟動(dòng)完畢通知android.permission.RECEIVE_BOOT_COMPLETED讀取聯(lián)系人信息android.permission.READ_CONTACTS修改聯(lián)系人信息android.permission.WRITE_CONTACTS目錄Android環(huán)境配置和開(kāi)發(fā)Android平臺(tái)架構(gòu)Android應(yīng)用程序構(gòu)成如何開(kāi)發(fā)一個(gè)例子從Internet獲取數(shù)據(jù)利用HttpURLConnection對(duì)象,我們可以從網(wǎng)絡(luò)中獲取網(wǎng)頁(yè)數(shù)據(jù).URLurl=newURL("://sina");HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setConnectTimeout(6*1000);//設(shè)置連接超時(shí)if(conn.getResponseCode()!=200)thrownewRuntimeException("請(qǐng)求url失敗");InputStreamis=conn.getInputStream();//得到網(wǎng)絡(luò)返回的輸入流Stringresult=readData(is,"GBK");conn.disconnect();System.out.println(result);//第一個(gè)參數(shù)為輸入流,第二個(gè)參數(shù)為字符集編碼publicstaticStringreadData(InputStreaminSream,StringcharsetName)throwsException{ ByteArrayOutputStreamoutStream=newByteArrayOutputStream(); byte[]buffer=newbyte[1024]; intlen=-1; while((len=inSream.read(buffer))!=-1){ outStream.write(buffer,0,len); } byte[]data=outStream.toByteArray(); outStream.close(); inSream.close(); returnnewString(data,charsetName);}從Internet獲取數(shù)據(jù)利用HttpURLConnection對(duì)象,我們可以從網(wǎng)絡(luò)中獲取文件數(shù)據(jù).URLurl=newURL("://sinaapp/Img269812337.jpg");HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setConnectTimeout(6*1000);if(conn.getResponseCode()!=200)thrownewRuntimeException("請(qǐng)求url失敗");InputStreamis=conn.getInputStream();readAsFile(is,"Img269812337.jpg");publicstaticvoidreadAsFile(InputStreaminSream,Filefile)throwsException{ FileOutputStreamoutStream=newFileOutputStream(file); byte[]buffer=newbyte[1024]; intlen=-1; while((len=inSream.read(buffer))!=-1){ outStream.write(buffer,0,len); } outStream.close(); inSream.close();}向Internet發(fā)送請(qǐng)求參數(shù)利用HttpURLConnection對(duì)象,我們可以向網(wǎng)絡(luò)發(fā)送請(qǐng)求參數(shù).StringrequestUrl="://localhost:8080/itcast/contanctmanage.do";Map<String,String>requestParams=newHashMap<String,String>();requestParams.put("age","12");requestParams.put("name","中國(guó)");StringBuilderparams=newStringBuilder();for(Map.Entry<String,String>entry:requestParams.entrySet()){ params.append(entry.getKey()); params.append("="); params.append(URLEncoder.encode(entry.getValue(),"UTF-8")); params.append("&");}if(params.length()>0)params.deleteCharAt(params.length()-1);byte[]data=params.toString().getBytes();URLrealUrl=newURL(requestUrl);HttpURLConnectionconn=(HttpURLConnection)realUrl.openConnection();向Internet發(fā)送請(qǐng)求參數(shù)conn.setDoOutput(true);//發(fā)送POST請(qǐng)求必須設(shè)置允許輸出conn.setUseCaches(false);//不使用Cacheconn.setRequestMethod("POST"); conn.setRequestProperty("Connection","Keep-Alive");//維持長(zhǎng)連接conn.setRequestProperty("Charset","UTF-8");conn.setRequestProperty("Content-Length",String.valueOf(data.length));conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");DataOutputStreamoutStream=newDataOutputStream(conn.getOutputStream());outStream.write(data);outStream.flush();if(conn.getResponseCode()==200){Stringresult=readAsString(conn.getInputStream(),"UTF-8");outStream.close();System.out.println(result);}=向Internet發(fā)送xml數(shù)據(jù)利用HttpURLConnection對(duì)象,我們可以向網(wǎng)絡(luò)發(fā)送xml數(shù)據(jù).StringBuilderxml=newStringBuilder();xml.append("<?xmlversion=\"1.0\"encoding=\"utf-8\"?>");xml.append("<M1V=10000>");xml.append("<UI=1D=\"N73\">中國(guó)</U>");xml.append("</M1>");byt
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖北省中考語(yǔ)文模擬試卷(附答案)
- 2025屆山西省臨汾市高三上學(xué)期適應(yīng)性訓(xùn)練考試(一)地理含答案
- 2025年初中人教版八年級(jí)上冊(cè)第四章光現(xiàn)象 第四節(jié)光的折射 說(shuō)課稿
- 4.2《光的反射》說(shuō)課稿2025年初中人教版物理八年級(jí)上冊(cè)
- 2025年黨員領(lǐng)導(dǎo)干部網(wǎng)上學(xué)法用法考試題及答案(共八套)
- 設(shè)備委托處置協(xié)議
- 情人節(jié)露營(yíng)活動(dòng)方案
- 鑒賞美術(shù)的心得體會(huì)
- 酒店行政酒廊
- 銀行裝修售后服務(wù)備忘錄
- 國(guó)家開(kāi)放大學(xué)《Photoshop圖像處理》章節(jié)測(cè)試題參考答案
- 紅木文化智慧樹(shù)知到答案2024年廣西大學(xué)
- 眼科常用藥物及護(hù)理
- 第45屆世界技能大賽移動(dòng)機(jī)器人項(xiàng)目福建省選拔賽技術(shù)文件(定稿)
- 《無(wú)人機(jī)測(cè)繪技術(shù)》項(xiàng)目1任務(wù)3無(wú)人機(jī)測(cè)繪基礎(chǔ)知識(shí)
- 山西省2024年中考道德與法治真題試卷(含答案)
- 三級(jí)安全教育試題(公司級(jí)、部門級(jí)、班組級(jí))
- 2024年《論教育》全文課件
- 小學(xué)科學(xué)青島版(六三制)六年級(jí)上冊(cè)全冊(cè)教案(共25課)(2022秋)
- 智鼎在線測(cè)評(píng)題
- 2024年醫(yī)用衛(wèi)生材料敷料項(xiàng)目申請(qǐng)報(bào)告模板
評(píng)論
0/150
提交評(píng)論