Android應(yīng)用元件_第1頁(yè)
Android應(yīng)用元件_第2頁(yè)
Android應(yīng)用元件_第3頁(yè)
Android應(yīng)用元件_第4頁(yè)
Android應(yīng)用元件_第5頁(yè)
已閱讀5頁(yè),還剩27頁(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)介

1、本投影片(下稱(chēng)教用資源)僅授權(quán)給採(cǎi)用教用資源相關(guān)之旗標(biāo)書(shū)籍為教科書(shū)之授課老師(下稱(chēng)老師)專(zhuān)用,老師為教學(xué)使用之目的,得摘錄、編輯、重製教用資源(但使用量不得超過(guò)各該教用資源內(nèi)容之80%)以製作為輔助教學(xué)之教學(xué)投影片,並於授課時(shí)搭配旗標(biāo)書(shū)籍公開(kāi)播放,但不得為網(wǎng)際網(wǎng)路公開(kāi)傳輸之遠(yuǎn)距教學(xué)、網(wǎng)路教學(xué)等之使用;除此之外,老師不得再授權(quán)予任何第三人使用,並不得將依此授權(quán)所製作之教學(xué)投影片之相關(guān)著作物移作他用。著作權(quán)所有 旗標(biāo)出版股份有限公司Chapter 7Android應(yīng)用元件ActivityManagerActivityManagern ActivityManager可管理所有的活動(dòng)(activiti

2、es),下表為ActivityManager所提供的巢狀類(lèi)別。類(lèi)別名稱(chēng)功能介紹ActivityManager.MemoryInfo關(guān)於記憶體相關(guān)訊息ActivityManager.ProcessErrorStateInfo錯(cuò)誤的程序訊息ActivityManager.RecentTaskInfo最近使用的任務(wù)訊息ActivityManager.RunningAppProcessInfo正在執(zhí)行的程序訊息ActivityManager.RunningServiceInfo正在執(zhí)行的服務(wù)訊息ActivityManager.RunningTaskInfo正在執(zhí)行的任務(wù)訊息ActivityManage

3、rn 在本節(jié)中,介紹抓取剩餘記憶體為範(fàn)例,程式碼如下:public class ActivityManagerExample extends Activity Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.); ActivityManager myManager = (ActivityManager)

4、getSystemService(ACTIVITY_SERVICE); / 建立ActivityManager.MemoryInfo物件 ActivityManager.MemoryInfo outInfo = new ActivityManager.MemoryInfo(); / 利用getMemoryInfo方法獲取剩餘記憶體資訊 myManager.getMemoryInfo(outInfo); / 將得到之記憶體大小除1024轉(zhuǎn)換單位為KB tv.setText(剩餘記憶體: + (outInfo.availMem/1024) + KB); ActivityManagern 範(fàn)例結(jié)果如

5、下,左圖為範(fàn)例執(zhí)行結(jié)果,右圖為系統(tǒng)狀態(tài)顯示:ServiceServicenService是運(yùn)行在背景的服務(wù),如聽(tīng)音樂(lè)時(shí),可利用Service讓音樂(lè)在背景執(zhí)行,這樣就可以關(guān)閉執(zhí)行音樂(lè)的Activity來(lái)做其他事情,當(dāng)要關(guān)閉音樂(lè)時(shí),可以在抓取Service資訊後將其停止或是其他動(dòng)作。nService服務(wù)必須對(duì)應(yīng)到AndroidManifest.xml。Service可由Activity來(lái)啟動(dòng),啟動(dòng)之後可利用BroadcastReceiver 來(lái)取得相關(guān)Service訊息。Servicen 本節(jié)範(fàn)例利用Service服務(wù)在背景執(zhí)行來(lái)實(shí)作一個(gè)簡(jiǎn)易Timer,並利用Logcat來(lái)觀看結(jié)果,範(fàn)例程式碼如下

6、:public class ServiceExample extends Activity Override public void onCreate(Bundle savedInstanceState) / 略 myButton.setOnClickListener(new OnClickListener() public void onClick(View v) if ( myButton.getText().equals(開(kāi)始計(jì)時(shí)) ) myButton.setText(停止計(jì)時(shí)); Intent i = new Intent(ServiceExample.this, myService

7、.class); startService(i); else myButton.setText(開(kāi)始計(jì)時(shí)); Intent i = new Intent(ServiceExample.this, myService.class);stopService(i); ); 完整程式碼請(qǐng)參考光碟中 ServiceExample.javaServicen建立Service Classpublic class myService extends Service / 此Thread每次迴圈會(huì)sleep 1秒用來(lái)計(jì)算此Service執(zhí)行的總時(shí)間 / 並傳送Message訊息 / Service尚未結(jié)束則傳送P

8、RINT Message / 當(dāng)接收到Thread傳送Message訊息時(shí),若訊息內(nèi)容為PRINT則印出 / 此Service目前執(zhí)行的總時(shí)間,若收到STOP訊息時(shí)則停止Thread運(yùn)作 / 覆寫(xiě)onStart讓Service開(kāi)始時(shí)執(zhí)行指定的動(dòng)作Overridepublic void onStart (Intent intent, int startId) / 覆寫(xiě)onDestroy讓Service結(jié)束時(shí)執(zhí)行指定的動(dòng)作Overridepublic void onDestroy() / Service結(jié)束時(shí)傳送STOP Message用來(lái)停止Thread 完整程式碼請(qǐng)參考光碟中 myServic

9、e.javaServicen 使用Service還必須將Service設(shè)定在AndroidManifest.xml中,如下: Servicen範(fàn)例結(jié)果如下:SearchManagerSearchManagern SearchManager類(lèi)別提供系統(tǒng)搜尋的服務(wù),在正常情況下不會(huì)直接使用此類(lèi)別來(lái)做應(yīng)用,可利用Intent的ACTION_SEARCH或 context.getSystemService (Context.SEARCH_SERVICE)來(lái)應(yīng)用搜尋服務(wù)。在許多應(yīng)用程式中都會(huì)提供一個(gè)搜尋的介面,比較平常的做法是將此搜尋介面放在Menu中。n 搜尋可分為兩種,Local Search以及G

10、loble Search,Local Search搜尋範(fàn)圍為應(yīng)用程式定義的範(fàn)圍,Globle Search則是搜尋整個(gè)系統(tǒng)。SearchManagern 在本範(fàn)例中,實(shí)作一個(gè)簡(jiǎn)單的搜尋範(fàn)例,利用Menu以及一個(gè)EditText來(lái)實(shí)作。當(dāng)Menu中有個(gè)Search的按鈕,當(dāng)按下時(shí)會(huì)跳出一個(gè)簡(jiǎn)易的快速搜尋列,而EditText中的文字則會(huì)自動(dòng)被輸入至快速搜尋列當(dāng)中,範(fàn)例程式碼如下:public class SearchExample extends Activity EditText searchEdit; Override public void onCreate(Bundle savedIns

11、tanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); / 設(shè)定搜尋為L(zhǎng)ocal Search setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); searchEdit = (EditText) findViewById(R.id.SearchEdit); public boolean onCreateOptionsMenu(Menu menu) menu.add(0, 0, 0, Search); return true; Override publi

12、c boolean onOptionsItemSelected(MenuItem item) Bundle dataBundle = new Bundle(); String queryData = searchEdit.getText().toString(); startSearch(queryData, false, dataBundle, false); return super.onOptionsItemSelected(item); SearchManagern 啟動(dòng)搜尋則是使用startSearch此Method,使用方法如下:n 參數(shù)如下表所示:startSearch (Str

13、ing initialQuery, boolean selectInitialQuery, Bundle appSearchData, boolean globalSearch)類(lèi)別名稱(chēng)功能介紹initialQuery若此字串不為空白,則會(huì)將此字串自動(dòng)加在搜尋列上。selectInitialQuery若為true,則initialQuery會(huì)變成預(yù)設(shè)搜尋條件,當(dāng)再輸入其他字會(huì)將原字串覆蓋掉。appSearchData應(yīng)用程式可加入application-specific額外的內(nèi)容來(lái)增加搜尋的條件globalSearch若為false,則看程式是否有設(shè)定,若也沒(méi)有預(yù)設(shè)設(shè)定,則自動(dòng)使用Global

14、 Search方式;若為true,則設(shè)定為platform-global searchSearchManagern 範(fàn)例結(jié)果如下:Broadcast ReceiversBroadcast Receiversn BroadcastReceiver在許多手機(jī)應(yīng)用程式上是必須的一個(gè)工具,當(dāng)應(yīng)用程式註冊(cè)一個(gè)BroadcastReceiver服務(wù)後,可利用onReceive方法來(lái)接收關(guān)於註冊(cè)之服務(wù)訊息,註冊(cè)方法如下:registerReceiver(BroadcastReceiver receiver, IntentFilter filter)Broadcast Receiversn onReceive

15、會(huì)根據(jù)程式跟系統(tǒng)註冊(cè)的IntentFilter來(lái)獲取相關(guān)服務(wù)訊息,在此簡(jiǎn)單介紹一些關(guān)於電池與電源相關(guān)的filter如下表:類(lèi)別名稱(chēng)功能介紹ACTION_BATTERY_CHANGED電池狀態(tài)是否改變ACTION_BATTERY_LOW電池是否為低電量狀態(tài)ACTION_BATTERY_OKAY當(dāng)電池狀態(tài)從低電量變?yōu)檎k娏繒r(shí)會(huì)觸發(fā)此狀態(tài)ACTION_POWER_CONNECTED當(dāng)裝置接上外部電源時(shí)ACTION_POWER_DISCONNECTED當(dāng)裝置外部電源移除時(shí)分頁(yè)選單n 本節(jié)範(fàn)例利用Toast顯示電量,當(dāng)電量有改變時(shí),BroadcastReceiver會(huì)計(jì)算改變後的電量,範(fàn)例程式碼如下:

16、private BroadcastReceiver batteryReceiver = new BroadcastReceiver() int level; int scale; Override public void onReceive(Context context, Intent intent) String action = intent.getAction(); / 判斷接收到的事件是否為ACTION_BATTERY_CHANGED if (action.equals(Intent.ACTION_BATTERY_CHANGED) / 設(shè)定電池level level = intent

17、.getIntExtra(level, 0); / 設(shè)定電池scale scale = intent.getIntExtra(scale, 100); / 設(shè)定Toast停留長(zhǎng)短 int duration = Toast.LENGTH_LONG; / 計(jì)算剩餘電量百分比 String text = 剩餘電量為: + ( level * 100 / scale ) + %; Toast.makeText(context, text, duration).show(); ;Content ProvidersContent Providersn ContentProvider可提供一個(gè)介面給所有應(yīng)用

18、程式來(lái)分享資料,而分享資料的基本格式是利用URI來(lái)當(dāng)成傳遞的媒介:n 而ContentProvider的scheme為content:/,而在CONTENT_URI中的各種URI都有ID,所以在向ContentProvider指定取得某個(gè)ID的資料,如下:n 在此可利用ContentUris中的withAppendedId方法來(lái)幫URI加入ID:n 或是利用Uri的withAppendedPath方法加入ID : / ? #content : /. . . /35Uri myUri = ContentUris.withAppendedId( Uri contentUri, long id );

19、withAppendedPath(Uri baseUri, String pathSegment);Content ResolverContent Resolvern 在前面章節(jié)提到的ContentProvider可將Content分享至不同的應(yīng)用程式之中,而ContentResolver則是一個(gè)標(biāo)準(zhǔn)的方式來(lái)取得ContentProvider所提供的資料,也是用來(lái)修改資料的方法,但若牽涉到寫(xiě)入或修改資料的話,則要看目標(biāo)的ContentProvider是否允許使用者對(duì)資料做存取的動(dòng)作,若無(wú)此權(quán)限,則ContentResolver方法會(huì)失敗。n ContentProvider通常會(huì)使用URI的方式

20、來(lái)當(dāng)作分享資料的識(shí)別,故在ContentResolver要抓取某一ContentProvider資料時(shí)則必須將要抓取的URI當(dāng)成參數(shù)來(lái)使用。Content Resolvern 在本節(jié)範(fàn)例中,我們利用系統(tǒng)內(nèi)建Phones.CONTENT_URI來(lái)得到電話中的聯(lián)絡(luò)人資訊並將其列表,範(fàn)例程式碼如下:public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); ContentResolver cr = getContentResolver(); / Query聯(lián)絡(luò)人資料,並將結(jié)果儲(chǔ)存在Cursor

21、中 Cursor c = cr.query(Contacts.Phones.CONTENT_URI, null, null, null, null); phoneInfo_Name = new Stringc.getCount(); phoneInfo_Number = new Stringc.getCount(); / 先看抓取之 cusor 是否有資料 if (c.moveToFirst() int nameColumn = c.getColumnIndex(Phones.NAME); int phoneColumn = c.getColumnIndex(Phones.NUMBER); i

22、nt index = 0; do phoneInfo_Nameindex = c.getString(nameColumn); phoneInfo_Numberindex = c.getString(phoneColumn); index+; while (c.moveToNext(); setListAdapter(new MyListAdapter(this); Content ResolvernContentResolver的query參數(shù)如下表:參數(shù)功能描述uri欲擷取資料之content:/projection指定要回傳哪些欄位,若值為null代表全部回傳selection指定要回傳

23、哪些列,若值為null代表全部回傳selectionArgs可在回傳條件中加入?,此陣列會(huì)依序取代未知的值sortOrder設(shè)定回傳結(jié)果的排序方式Content Resolvern範(fàn)例結(jié)果如下:Content Resolvern本範(fàn)例必須要在AndroidManifest.xml中加入下述權(quán)限方可正常運(yùn)作: Content Resolvern 上面範(fàn)例是取得ContentProvider的資料,而接著介紹如何透過(guò)ContentResolver來(lái)新增資料,要達(dá)到此動(dòng)作則需使用ContentValues,此範(fàn)例新增一筆聯(lián)絡(luò)人資料至通訊錄中,程式碼如下:ContentResolver cr = getContentResolver();/ 建立ContentValues物件ContentValues values = new ContentValues();/ 設(shè)定People.NAME以及People.STARREDvalues.put(People.NAME, NCU-FA

溫馨提示

  • 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)論