




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第6章章 組件通信與廣播組件通信與廣播消息消息本章結(jié)構(gòu)nIntent概念nIntent功能:q使用Intent啟動Activity/Servicen獲取Activity/Service返回值q使用Intent發(fā)送和接收廣播消息qIntent過濾器Intent概念nIntent是一種組件之間消息傳遞機制,是一個動作的完整描述,包含了q動作的產(chǎn)生組件、接收組件和傳遞的數(shù)據(jù)信息nIntent為Activity、Service和BroadcastReceiver等組件提供交互能力nIntent的用途n啟動Activity和Servicen在Android系統(tǒng)上發(fā)布廣播消息 組件1組件2消息Inten
2、tIntent內(nèi)容Intent內(nèi)容內(nèi)容描述描述Component(組件)用于顯示啟動,包含調(diào)用及被調(diào)用組件的信息Action(動作)定義要執(zhí)行的動作,通常使用Java類名和包的完全限定名構(gòu)成Category(類別)動作執(zhí)行的環(huán)境Data(數(shù)據(jù))動作處理的數(shù)據(jù),為URI格式Extra(額外數(shù)據(jù))額外的數(shù)據(jù)Flag(標(biāo)志)新啟動的組件是否運行在新的進程中Intent概念A(yù)ndroid App1ActivityUIServiceContentProviderBroadcastReceiverAndroid App2ActivityUIServiceAndroid操作系統(tǒng)(平臺)IntentInten
3、tIntentIntentIntentIntent功能啟動Activityn啟動Activityq在Android系統(tǒng)中,應(yīng)用程序一般都有多個Activity,Intent可以實現(xiàn)不同Activity之間的切換和數(shù)據(jù)傳遞q啟動Activity方式n顯式啟動,程序必須在Intent中指明啟動的Activity所在的類n隱式啟動, Android系統(tǒng)根據(jù)Intent的動作和數(shù)據(jù)來決定啟動哪一個Activity,也就是說在隱式啟動時,Intent中只包含需要執(zhí)行的動作和所包含的數(shù)據(jù),而無需指明具體啟動哪一個Activity,選擇權(quán)有Android系統(tǒng)和最終用戶來決定q顯式啟動Intent inten
4、t = new Intent(IntentDemo.this, ActivityToStart.class);startActivity(intent);Intent功能啟動Activity創(chuàng)建一個Intent指定應(yīng)用程序上下文和要啟動的ActivityActivity:startActivity()qIntentDemo示例n包含兩個Activity類qIntentDemoqActivityToStartn程序啟動是默認啟動IntentDemo這個ActivityIntent功能啟動Activity點擊按鈕后n清單文件(AndroidManifest.xml)q在AndroidManifes
5、t.xml文件中注冊上面這兩個Activity,應(yīng)使用標(biāo)簽,嵌套在標(biāo)簽內(nèi)部 Intent功能啟動Activity13. 14. 16. 17. 18. 19. Intent功能啟動Activityn在IntentDemo.java文件中,包含了顯示使用Intent啟動Activity的核心代碼qIntent構(gòu)造函數(shù)的第1個參數(shù)是應(yīng)用程序上下文,程序中的應(yīng)用程序上下文就是IntentDemo;q第2個參數(shù)是接收Intent的目標(biāo)組件,使用的是顯式啟動方式,直接指明了需要啟動的ActivityButton button = (Button)findViewById(R.id.btn);button
6、.setOnClickListener(new View.OnClickListener()public void onClick(View view)Intent intent = new Intent(IntentDemo.this, ActivityToStart.class);startActivity(intent););Intent功能啟動Activityq隱式啟動n優(yōu)點:不需要指明需要啟動哪一個Activity,而由Android系統(tǒng)來決定,有利于使用第三方組件n隱式啟動Activity時,Android系統(tǒng)在應(yīng)用程序運行時解析Intent,并根據(jù)一定的規(guī)則對Intent和Act
7、ivity進行匹配,使Intent上的動作、數(shù)據(jù)與Activity完全吻合n匹配的Activity可以是應(yīng)用程序本身的,也可以是Android系統(tǒng)內(nèi)置的,還可以是第三方應(yīng)用程序提供的。因此,這種方式更加強調(diào)了Android應(yīng)用程序中組件的可復(fù)用性Intent功能啟動ActivityApp活動1活動2活動NAndroid系統(tǒng)n隱式Intent語法:當(dāng)構(gòu)建一個隱式Intent時,需要指定要執(zhí)行的動作,另外也可以提供執(zhí)行那個動作需要的數(shù)據(jù)的URIn例子:qIntent的動作是Intent.ACTION_VIEW,根據(jù)URI的數(shù)據(jù)類型來匹配動作q數(shù)據(jù)部分的URI是Web地址,使用Uri.parse(u
8、rlString)方法,可以簡單的把一個字符串解釋成Uri對象q在缺省情況下,Android系統(tǒng)會調(diào)用內(nèi)置的Web瀏覽器Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(http:/);startActivity(intent);Intent功能啟動ActivitynAndroid系統(tǒng)支持的常見動作字符串常量表動作動作說明說明ACTION_ANSWER打開接聽電話的Activity,默認為Android內(nèi)置的撥號盤界面ACTION_CALL打開撥號盤界面并撥打電話,使用Uri中的數(shù)字部分作為電話號碼ACTION_DELETE打開一
9、個Activity,對所提供的數(shù)據(jù)進行刪除操作ACTION_DIAL打開內(nèi)置撥號盤界面,顯示Uri中提供的電話號碼ACTION_EDIT打開一個Activity,對所提供的數(shù)據(jù)進行編輯操作ACTION_INSERT打開一個Activity,在提供數(shù)據(jù)的當(dāng)前位置插入新項ACTION_PICK啟動一個子Activity,從提供的數(shù)據(jù)列表中選取一項ACTION_SEARCH啟動一個Activity,執(zhí)行搜索動作ACTION_SENDTO啟動一個Activity,向數(shù)據(jù)提供的聯(lián)系人發(fā)送信息ACTION_SEND啟動一個可以發(fā)送數(shù)據(jù)的ActivityACTION_VIEW最常用的動作,對以Uri方式傳送
10、的數(shù)據(jù),根據(jù)Uri協(xié)議部分以最佳方式啟動相應(yīng)的Activity進行處理。對于http:address將打開瀏覽器查看;對于tel:address將打開撥號呼叫指定的電話號碼ACTION_WEB_SEARCH打開一個Activity,對提供的數(shù)據(jù)進行Web搜索Intent功能啟動ActivitynWebViewIntentDemo示例說明如何隱式啟動ActivityIntent功能啟動Activityn當(dāng)用戶在文本框中輸入要訪問網(wǎng)址后,通過點擊“瀏覽此URL”按鈕,程序根據(jù)用戶輸入的網(wǎng)址生成一個Intent,并以隱式啟動的方式調(diào)用Android內(nèi)置的Web瀏覽器,并打開指定的Web頁面n本例輸入
11、的網(wǎng)址是哈爾濱工程大學(xué)的主站地址,地址是:http:/Intent功能啟動Activityq在上一小節(jié)IntentDemo示例中,通過使用startActivity(Intent)方法啟動Activity后,啟動后的兩個Activity之間相互獨立,沒有任何的關(guān)聯(lián)q在很多情況下,后啟動的Activity是為了讓用戶對特定信息進行選擇,在關(guān)閉這個Activity后,用戶的選擇信息需要返回給未關(guān)閉的那個Activityq按照Activity啟動的先后順序,先啟動的稱為父Activity,后啟動的稱為子Activityq如果需要將子Activity的部分信息返回給父Activity,則可以使用Sub
12、-Activity的方式去啟動子ActivityIntent功能獲取Activity返值q獲取子Activity的返回值,一般可以分為以下三個步驟Intent功能獲取Activity返值父ActivityStartActivityForResult()onActivityResult()子Activity計算并設(shè)置Activity返回值setResult()啟動返回q以Sub-Activity的方式啟動子Activityn調(diào)用startActivityForResult(Intent, requestCode)函數(shù)q參數(shù)Intent用于決定啟動哪個Activityq參數(shù)requestCode是
13、唯一的標(biāo)識子Activity的請求碼n顯式啟動子Activity的代碼如下n隱式啟動子Activity的代碼如下int SUBACTIVITY1 = 1;Intent intent = new Intent(this, SubActivity1.class);startActivityForResult(intent, SUBACTIVITY1);int SUBACTIVITY2 = 2;Uri uri = Uri.parse(content:/contacts/people);Intent intent = new Intent(Intent.ACTION_PICK, uri);startA
14、ctivityForResult(intent, SUBACTIVITY2);Intent功能獲取Activity返值q設(shè)置子Activity的返回值n在子Activity調(diào)用finish()函數(shù)關(guān)閉前,調(diào)用setResult()函數(shù)將所需的數(shù)據(jù)返回給父ActivitynsetResult()函數(shù)有兩個參數(shù)q結(jié)果碼:通常是RESULT_OK或RESULT_CANCELED,或自定義的結(jié)果碼,結(jié)果碼均為整數(shù)類型q返回值:返回值用封裝在Intent中,子Activity通過Intent將需要返回的數(shù)據(jù)傳遞給父Activity。數(shù)據(jù)主要是Uri形式,可以附加一些額外信息,這些額外信息用Extra的集
15、合表示Intent功能獲取Activity返值Uri data = Uri.parse(tel: + tel_number);Intent result = new Intent(null, data);result.putExtra(address, );setResult(RESULT_OK, result);finish();q在父Activity中獲取返回值n當(dāng)子Activity關(guān)閉時,啟動它的父Activity的onActivityResult()函數(shù)將被調(diào)用;如果需要在父Activity中處理子Activity的返回值,則重載此函數(shù)即可n此函數(shù)的語法如下q第1個參數(shù)requestC
16、ode,用來表示是哪一個子Activity的返回值q第2個參數(shù)resultCode用于表示子Activity的返回狀態(tài)q第3個參數(shù)data是子Activity的返回數(shù)據(jù),返回數(shù)據(jù)類型是Intent。根據(jù)返回數(shù)據(jù)的用途不同,Uri數(shù)據(jù)的協(xié)議則不同,也可以使用Extra方法返回一些原始類型的數(shù)據(jù)public void onActivityResult(int requestCode, int resultCode, Intent data);Intent功能獲取Activity返值n下面代碼說明如何在父Activity中處理子Activity的返回值private static final int
17、 SUBACTIVITY1 = 1;private static final int SUBACTIVITY2 = 2; Override public void onActivityResult(int requestCode, int resultCode, Intent data)Super.onActivityResult(requestCode, resultCode, data);switch(requestCode)case SUBACTIVITY1:if (resultCode = Activity.RESULT_OK)Uri uriData = data.getData();
18、else if (resultCode = Activity.RESULT_CANCEL)break;Intent功能獲取Activity返值n第1行代碼和第12行代碼是兩個子Activity的請求碼n第7行代碼對請求碼進行匹配n第9行和第11行代碼對結(jié)果碼進行判斷q如果返回的結(jié)果碼是Activity.RESULT_OK,則在代碼的第10行使用getData()函數(shù)獲取Intent中的Uri數(shù)據(jù)q如果返回的結(jié)果碼是Activity.RESULT_CANCELED,則不進行任何操作14.case SUBACTIVITY2:15.if (resultCode = Activity.RESULT_O
19、K)16.Uri uriData = data.getData();17.18.break;19. 20. Intent功能獲取Activity返值qActivityCommunication示例說明了如何以Sub-Activity方式啟動子Activity,以及使用Intent進行組件間通信Intent功能獲取Activity返值父Activity子Activityq當(dāng)用戶點擊“啟動Activity1”和“啟動Activity2”按鈕時,程序?qū)⒎謩e啟動子SubActivity1和SubActivity2Intent功能獲取Activity返值qSubActivity1提供了一個輸入框,以及“
20、接受”和“撤銷”兩個按鈕q如果在輸入框中輸入信息后點擊“接受”按鈕,程序會把輸入框中的信息傳遞給其父Activity,并在父Activity的界面上顯示q如果用戶點擊“撤銷”按鈕,則程序不會向父Activity傳遞任何信息Intent功能獲取Activity返值qSubActivity2主要是為了說明如何在父Activity中處理多個子Activity,因此僅提供了用于關(guān)閉SubActivity2的“關(guān)閉”按鈕Intent功能獲取Activity返值qActivityCommunication文件結(jié)構(gòu)Intent功能獲取Activity返值qActivityCommunication.java
21、文件的核心代碼如下public class ActivityCommunication extends Activity private static final int SUBACTIVITY1 = 1;private static final int SUBACTIVITY2 = 2;TextView textView;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (Te
22、xtView)findViewById(R.id.textShow); final Button btn1 = (Button)findViewById(R.id.btn1); final Button btn2 = (Button)findViewById(R.id.btn2); btn1.setOnClickListener(new OnClickListener()public void onClick(View view)Intent intent = new Intent(ActivityCommunication.this, SubActivity1.class);startAct
23、ivityForResult(intent, SUBACTIVITY1);Intent功能獲取Activity返值17. ); 20.btn2.setOnClickListener(new OnClickListener()21. public void onClick(View view)22.Intent intent = new Intent(ActivityCommunication.this, SubActivity2.class);23.startActivityForResult(intent, SUBACTIVITY2);24.25. ); 28. Override29. pr
24、otected void onActivityResult(int requestCode, int resultCode, Intent data) 30. super.onActivityResult(requestCode, resultCode, data);31.32. switch(requestCode)33. case SUBACTIVITY1:Intent功能獲取Activity返值n代碼的第2行和第3行分別定義了兩個子Activity的請求碼n在代碼的第16行和第23行以Sub-Activity的方式分別啟動兩個子Activity34. if (resultCode = R
25、ESULT_OK)35. Uri uriData = data.getData();36. textView.setText(uriData.toString();37. 38. break;39. case SUBACTIVITY2:40. break;41. 42. 43. Intent功能獲取Activity返值n代碼第29行是子Activity關(guān)閉后的返回值處理函數(shù),其中requestCode是子Activity返回的請求碼,應(yīng)該與第2行和第3行定義的兩個請求碼相匹配nresultCode是結(jié)果碼,在代碼第32行對結(jié)果碼進行判斷,如果等于RESULT_OK,在第35行代碼獲取子Acti
26、vity的返回值中的數(shù)據(jù)ndata是返回值,子Activity需要返回的數(shù)據(jù)就保存在data中Intent功能獲取Activity返值qSubActivity1.java的核心代碼如下public class SubActivity1 extends Activity Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.subactivity1);final EditText editText = (EditText)
27、findViewById(R.id.edit);Button btnOK = (Button)findViewById(R.id.btn_ok);Button btnCancel = (Button)findViewById(R.id.btn_cancel);btnOK.setOnClickListener(new OnClickListener()public void onClick(View view)String uriString = editText.getText().toString();Uri data = Uri.parse(uriString);Intent result
28、 = new Intent(null, data);setResult(RESULT_OK, result);finish();Intent功能獲取Activity返值n第13行代碼將EditText控件的內(nèi)容作為數(shù)據(jù)保存在Uri中n第14行代碼中使用這個Uri構(gòu)造Intentn第15行代碼中,將Intent作為返回值,RESUIT_OK作為結(jié)果碼,通過調(diào)用setResult()函數(shù),將返回值和結(jié)果碼傳遞給父Activityn第16行代碼調(diào)用finish()函數(shù)關(guān)閉當(dāng)前的子Activity18.);19.20.btnCancel.setOnClickListener(new OnClickLi
29、stener()21.public void onClick(View view)22.setResult(RESULT_CANCELED, null);23.finish();24.25. );26. 27. Intent功能獲取Activity返值qSubActivity2.java的核心代碼n第10行的setResult()函數(shù)僅設(shè)置了結(jié)果碼,第2個參數(shù)為null,表示數(shù)據(jù)需要傳遞給父Activitypublic class SubActivity2 extends Activity Overridepublic void onCreate(Bundle savedInstanceSta
30、te) super.onCreate(savedInstanceState);setContentView(R.layout.subactivity2); Button btnReturn = (Button)findViewById(R.id.btn_return);btnReturn.setOnClickListener(new OnClickListener()public void onClick(View view)setResult(RESULT_CANCELED, null);finish(););Intent功能獲取Activity返值Intent功能廣播消息n廣播消息qInt
31、ent的另一種用途是發(fā)送廣播消息q應(yīng)用程序和Android系統(tǒng)都可以使用Intent發(fā)送廣播消息q廣播消息的內(nèi)容可以與應(yīng)用程序密切相關(guān)的數(shù)據(jù)信息,也可以Android的系統(tǒng)信息,例如網(wǎng)絡(luò)連接變化、電池電量變化、接收到短信和系統(tǒng)設(shè)置變化等等q如果應(yīng)用程序注冊了BroadcastReceiver,則可以接收到指定的廣播消息n廣播信息的使用方法Intent功能廣播消息String UNIQUE_STRING = edu.tjut.BroadcastReceiverDemo;Intent intent = new Intent(UNIQUE_STRING);intent.putExtra(key1,
32、value1);intent.putExtra(key2, value2);sendBroadcast(intent);注意:在構(gòu)造Intent時必須用一個全局唯一的字符串標(biāo)識其要執(zhí)行的動作,通常使用應(yīng)用程序包的名稱BroadcastReceiverActivitySendBroadcast()OnReceive()IntentAndroid操作系統(tǒng)IntentnBroadcastReceiver組件qBroadcastReceiver用于監(jiān)聽廣播消息q可以在AndroidManifest.xml文件或在代碼中注冊一個BroadcastReceiver,并在其中使用Intent 過濾器指定要處
33、理的廣播消息q創(chuàng)建BroadcastReceiver需繼承BroadcastReceiver類,并重載onReceive()方法。代碼如下public class MyBroadcastReceiver extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent intent) /TODO: React to the Intent received.Intent功能廣播消息qBroadcastReceiver的應(yīng)用程序不需要一直運行,當(dāng)Android系統(tǒng)接收到與之匹配的廣播消息時,會自動啟動此B
34、roadcastReceiverq基于以上的特征,BroadcastReceiver適合做一些資源管理的工作q在BroadcastReceiver接收到與之匹配的廣播消息后,onReceive()方法會被調(diào)用qonReceive()方法必須要在5秒鐘執(zhí)行完畢,否則Android系統(tǒng)會認為該組件失去響應(yīng),并提示用戶強行關(guān)閉該組件Intent功能廣播消息qBroadcastReceiverDemon在點擊“發(fā)生廣播消息”按鈕后,EditText控件中內(nèi)容將以廣播消息的形式發(fā)送出去,n示例內(nèi)部的BroadcastReceiver將接收這個廣播消息,并顯示在用戶界面的下方Intent功能廣播消息qBr
35、oadcastReceiverDemo.java文件中包含發(fā)送廣播消息的代碼,其關(guān)鍵代碼如下n第3行代碼創(chuàng)建Intent,將edu.hrbeu.BroadcastReceiverDem作為識別廣播消息的字符串標(biāo)識n第4行代碼添加了額外信息n第5行代碼調(diào)用sendBroadcast()函數(shù)發(fā)送廣播消息button.setOnClickListener(new OnClickListener()public void onClick(View view)Intent intent = new Intent(edu.tjut.BroadcastReceiverDemo);intent.putExtr
36、a(message, entryText.getText().toString();sendBroadcast(intent););Intent功能廣播消息q為了能夠使應(yīng)用程序中的BroadcastReceiver接收指定的廣播消息,首先要在AndroidManifest.xml文件中添加Intent過濾器,聲明BroadcastReceiver可以接收的廣播消息qAndroidManifest.xml文件的完整代碼如下Intent功能廣播消息n第14行代碼中創(chuàng)建了一個節(jié)點n在第15行中聲明了Intent過濾器的動作為“edu.hrbeu.BroadcastReceiverDemo”,這與Br
37、oadcastReceiverDemo.java文件中Intent的動作相一致,表明這個BroadcastReceiver可以接收動作為“edu.hrbeu.BroadcastReceiverDemo”的廣播消息13. 14.15. 16.17. 18. 19. 20. 21. Intent功能廣播消息qMyBroadcastReceiver.java文件創(chuàng)建了一個自定義的BroadcastReceiver,其核心代碼如下n第1行代碼首先繼承了BroadcastReceiver類n第3行代碼重載了onReveive()函數(shù)。當(dāng)接收到AndroidManifest.xml文件定義的廣播消息后,程
38、序?qū)⒆詣诱{(diào)用onReveive()函數(shù)public class MyBroadcastReceiver extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent intent) String msg = intent.getStringExtra(message);Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();Intent功能廣播消息n第4行代碼通過調(diào)用getStringExtra()函數(shù),從Intent中獲取標(biāo)識為messag
39、e的字符串?dāng)?shù)據(jù),并使用Toast將信息顯示在屏幕上n第5行代碼的Toast是一個顯示提示信息的類,調(diào)用makeText()函數(shù)可將提示信息短時間的浮現(xiàn)在用戶界面之上qmakeText()函數(shù)的第1個參數(shù)是上下文信息q第2個參數(shù)是需要顯示的提示信息q第3個參數(shù)是顯示的時間,Toast.LENGTH_SHORT表示短時間顯示,Toast.LENGTH_LONG表示長時間顯示;最后調(diào)用show()方法將提示信息實際顯示在界面之上Intent功能廣播消息Intent內(nèi)容Intent內(nèi)容內(nèi)容描述描述Component(組件)用于顯示啟動,包含調(diào)用及被調(diào)用組件的信息Action(動作)定義要執(zhí)行的動作,通
40、常使用Java類名和包的完全限定名構(gòu)成Category(類別)動作執(zhí)行的環(huán)境Data(數(shù)據(jù))動作處理的數(shù)據(jù),為URI格式Extra(額外數(shù)據(jù))額外的數(shù)據(jù)Flag(標(biāo)志)新啟動的組件是否運行在新的進程中nIntent過濾器qIntent過濾器是一種根據(jù)Intent中的動作(Action)、類別(Categorie)和數(shù)據(jù)(Data)等內(nèi)容,對適合接收該Intent的組件進行匹配和篩選的機制qIntent過濾器可以匹配數(shù)據(jù)類型、路徑和協(xié)議,還包括可以用來確定多個匹配項順序的優(yōu)先級(Priority)q應(yīng)用程序的Activity組件、Service組件和BroadcastReceiver都可以注冊I
41、ntent過濾器,則這些組件在特定的數(shù)據(jù)格式上就可以產(chǎn)生相應(yīng)的動作Intent過濾器Intent過濾器n注冊Intent過濾器q注冊方式:n在AndroidManifest.xml文件的各個組件的節(jié)點下定義節(jié)點,然后在節(jié)點中聲明該組件所支持的動作、執(zhí)行的環(huán)境和數(shù)據(jù)格式等信息n在程序代碼中動態(tài)地為組件設(shè)置Intent過濾器q節(jié)點支持標(biāo)簽、標(biāo)簽和標(biāo)簽n標(biāo)簽定義Intent過濾器的“動作”n標(biāo)簽定義Intent過濾器的“類別”n標(biāo)簽定義Intent過濾器的“數(shù)據(jù)”Intent過濾器q節(jié)點支持的標(biāo)簽和屬性標(biāo)簽標(biāo)簽屬性屬性說明說明android:name指定組件所能響應(yīng)的動作,用字符串表示,通常使用Ja
42、va類名和包的完全限定名構(gòu)成android:category指定以何種方式去服務(wù)Intent請求的動作android:host指定一個有效的主機名android:mimetype指定組件能處理的數(shù)據(jù)類型android:path有效的URI路徑名android:port主機的有效端口號android:scheme所需要的特定的協(xié)議Intent過濾器q標(biāo)簽用來指定Intent過濾器的服務(wù)方式,每個Intent過濾器可以定義多個標(biāo)簽,程序開發(fā)人員可使用自定義的類別,或使用Android系統(tǒng)提供的類別qAndroid系統(tǒng)提供的類別值值說明說明DEFAULT為Intent過濾器中定義的數(shù)據(jù)提供默認動作A
43、LTERNATIVEIntent數(shù)據(jù)默認動作的一個可替換的執(zhí)行方法SELECTED_ALTERNATIVE 和ALTERNATIVE類似,但替換的執(zhí)行方法不是指定的,而是被解析出來的BROWSABLE聲明Activity可以由瀏覽器啟動HOME設(shè)備啟動后顯示的第一個ActivityLAUNCHER在應(yīng)用程序啟動時首先被顯示Intent過濾器qAndroidManifest.xml文件中的每個組件的都被解析成一個Intent過濾器對象。q當(dāng)應(yīng)用程序安裝到Android系統(tǒng)時,所有的組件和Intent過濾器都會注冊到Android系統(tǒng)中。q這樣,Android系統(tǒng)便知道了如何將任意一個Intent
44、請求通過Intent過濾器映射到相應(yīng)的組件上Intent過濾器nIntent解析qIntent到Intent過濾器的映射過程稱為“Intent解析”qIntent解析可以在所有的組件中,找到一個可以與請求的Intent達成最佳匹配的Intent過濾器qIntent解析的匹配規(guī)則nAndroid系統(tǒng)把所有應(yīng)用程序包中的Intent過濾器集合在一起,形成一個完整的Intent過濾器列表n在Intent與Intent過濾器進行匹配時,Android系統(tǒng)會將列表中所有Intent過濾器的“動作”和“類別”與Intent進行匹配,任何不匹配的Intent過濾器都將被過濾掉。n沒有指定“動作”的Inten
45、t過濾器可以匹配任何的Intent,n但是沒有指定“類別”的Intent過濾器只能匹配沒有“類別”的IntentIntent過濾器n把Intent數(shù)據(jù)Uri的每個子部與Intent過濾器的標(biāo)簽中的屬性進行匹配,如果標(biāo)簽指定了協(xié)議、主機名、路徑名或MIME類型,那么這些屬性都要與Intent的Uri數(shù)據(jù)部分進行匹配,任何不匹配的Intent過濾器均被過濾掉n如果Intent過濾器的匹配結(jié)果多于一個,則可以根據(jù)在標(biāo)簽中定義的優(yōu)先級標(biāo)簽來對Intent過濾器進行排序,優(yōu)先級最高的Intent過濾器將被選擇Intent過濾器nIntentResolutionDemo示例qIntentResolutio
46、nDemo示例說明了如何在AndroidManifest.xml文件中注冊Intent過濾器,以及如何設(shè)置節(jié)點屬性來捕獲指定的IntentqAndroidManifest.xml的完整代碼如下 Intent過濾器nIntentResolutionDemo示例13.14.16. 17. 18. 19. 20. 21. 22. 23. 24. Intent過濾器n第7行代碼和第14行代碼分別定義了兩個Activityn第9行到第12行是第1個Activity的Intent過濾器,動作是ent.action.MAIN,類別是ent.category.LAU
47、NCHER。由過濾器的動作和類別可知,這個Activity是應(yīng)用程序啟動后顯示的缺省用戶界面n第1620行是第2個Activity的Intent過濾器,過濾器的動作是ent.action.VIEW,表示根據(jù)Uri協(xié)議,以最佳的方式啟動相應(yīng)的Activity;類別是ent.category.DEFAULT,表示數(shù)據(jù)的默認動作;數(shù)據(jù)的協(xié)議部分是android:scheme=schemodemo,數(shù)據(jù)的主機名稱部分是android:host=edu.tjutIntent過濾器nIntentResolutionDemo.java文件中Intent實例化和啟動Activity的代碼如下n第1行代碼定義的Intent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江新高考2024-2025學(xué)年高中政治第一單元文化與生活第一課周練過關(guān)一新人教版必修3
- 公路路牌采購合同范例
- 寧波品質(zhì)冷庫施工方案
- 屋面彩板施工方案
- 石拱涵施工方案
- 鄉(xiāng)鎮(zhèn)道路清掃合同范例
- 山坡管線施工方案
- 凈化車間改造合同范例
- 個人私有房屋購買合同范例
- 臨時工合同 兼職合同范例
- SWITCH塞爾達傳說曠野之息-1.6金手指127項修改使用說明教程
- 阻生牙的拔除
- 、野外生存教案
- 新形式下做好檢察信息工作的心得體會
- 綠色低碳節(jié)能先行3000字(9篇)
- 上海市浦東新區(qū)2022屆九年級中考二?;瘜W(xué)試卷+答案
- 水文地質(zhì)手冊
- 二級建造師《施工管理》高頻考點二
- 水質(zhì)采樣記錄
- 中智集團及下屬單位招聘筆試題庫2022
- YS/T 261-2011鋰輝石精礦
評論
0/150
提交評論