版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第6章章 組件通信與廣播組件通信與廣播消息消息本章結(jié)構(gòu)nIntent概念nIntent功能:q使用Intent啟動Activity/Servicen獲取Activity/Service返回值q使用Intent發(fā)送和接收廣播消息qIntent過濾器Intent概念nIntent是一種組件之間消息傳遞機(jī)制,是一個動作的完整描述,包含了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)志)新啟動的組件是否運(yùn)行在新的進(jìn)程中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顯式啟動1.Intent int
4、ent = new Intent(IntentDemo.this, ActivityToStart.class);2.startActivity(intent);Intent功能啟動Activity創(chuàng)建一個Intent指定應(yīng)用程序上下文和要啟動的ActivityActivity:startActivity()qIntentDemo示例n包含兩個Activity類qIntentDemoqActivityToStartn程序啟動是默認(rèn)啟動IntentDemo這個ActivityIntent功能啟動Activity點擊按鈕后n清單文件(AndroidManifest.xml)q在AndroidMan
5、ifest.xml文件中注冊上面這兩個Activity,應(yīng)使用標(biāo)簽,嵌套在標(biāo)簽內(nèi)部1.2.6. 7. 9.10. 11. 12.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)組件,使用的是顯式啟動方式,直接指明了需要啟動的Activity1.Button button = (Button)f
6、indViewById(R.id.btn);2.button.setOnClickListener(new View.OnClickListener()3.public void onClick(View view)4.Intent intent = new Intent(IntentDemo.this, ActivityToStart.class);5.startActivity(intent);6.7.);Intent功能啟動Activityq隱式啟動n優(yōu)點:不需要指明需要啟動哪一個Activity,而由Android系統(tǒng)來決定,有利于使用第三方組件n隱式啟動Activity時,Andro
7、id系統(tǒng)在應(yīng)用程序運(yùn)行時解析Intent,并根據(jù)一定的規(guī)則對Intent和Activity進(jìn)行匹配,使Intent上的動作、數(shù)據(jù)與Activity完全吻合n匹配的Activity可以是應(yīng)用程序本身的,也可以是Android系統(tǒng)內(nèi)置的,還可以是第三方應(yīng)用程序提供的。因此,這種方式更加強(qiá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ù)UR
8、I的數(shù)據(jù)類型來匹配動作q數(shù)據(jù)部分的URI是Web地址,使用Uri.parse(urlString)方法,可以簡單的把一個字符串解釋成Uri對象q在缺省情況下,Android系統(tǒng)會調(diào)用內(nèi)置的Web瀏覽器1.Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(http:/);2.startActivity(intent);Intent功能啟動ActivitynAndroid系統(tǒng)支持的常見動作字符串常量表動作動作說明說明ACTION_ANSWER打開接聽電話的Activity,默認(rèn)為Android內(nèi)置的撥號盤界面ACTION_CALL打開
9、撥號盤界面并撥打電話,使用Uri中的數(shù)字部分作為電話號碼ACTION_DELETE打開一個Activity,對所提供的數(shù)據(jù)進(jìn)行刪除操作ACTION_DIAL打開內(nèi)置撥號盤界面,顯示Uri中提供的電話號碼ACTION_EDIT打開一個Activity,對所提供的數(shù)據(jù)進(jìn)行編輯操作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啟動
10、一個可以發(fā)送數(shù)據(jù)的ActivityACTION_VIEW最常用的動作,對以Uri方式傳送的數(shù)據(jù),根據(jù)Uri協(xié)議部分以最佳方式啟動相應(yīng)的Activity進(jìn)行處理。對于http:address將打開瀏覽器查看;對于tel:address將打開撥號呼叫指定的電話號碼ACTION_WEB_SEARCH打開一個Activity,對提供的數(shù)據(jù)進(jìn)行Web搜索Intent功能啟動ActivitynWebViewIntentDemo示例說明如何隱式啟動ActivityIntent功能啟動Activityn當(dāng)用戶在文本框中輸入要訪問網(wǎng)址后,通過點擊“瀏覽此URL”按鈕,程序根據(jù)用戶輸入的網(wǎng)址生成一個Intent,
11、并以隱式啟動的方式調(diào)用Android內(nèi)置的Web瀏覽器,并打開指定的Web頁面n本例輸入的網(wǎng)址是哈爾濱工程大學(xué)的主站地址,地址是:http:/Intent功能啟動Activityq在上一小節(jié)IntentDemo示例中,通過使用startActivity(Intent)方法啟動Activity后,啟動后的兩個Activity之間相互獨立,沒有任何的關(guān)聯(lián)q在很多情況下,后啟動的Activity是為了讓用戶對特定信息進(jìn)行選擇,在關(guān)閉這個Activity后,用戶的選擇信息需要返回給未關(guān)閉的那個Activityq按照Activity啟動的先后順序,先啟動的稱為父Activity,后啟動的稱為子Activ
12、ityq如果需要將子Activity的部分信息返回給父Activity,則可以使用Sub-Activity的方式去啟動子ActivityIntent功能獲取Activity返值q獲取子Activity的返回值,一般可以分為以下三個步驟Intent功能獲取Activity返值父ActivityStartActivityForResult()onActivityResult()子Activity計算并設(shè)置Activity返回值setResult()啟動返回q以Sub-Activity的方式啟動子Activityn調(diào)用startActivityForResult(Intent, requestCod
13、e)函數(shù)q參數(shù)Intent用于決定啟動哪個Activityq參數(shù)requestCode是唯一的標(biāo)識子Activity的請求碼n顯式啟動子Activity的代碼如下n隱式啟動子Activity的代碼如下1.int SUBACTIVITY1 = 1;2.Intent intent = new Intent(this, SubActivity1.class);3.startActivityForResult(intent, SUBACTIVITY1);1.int SUBACTIVITY2 = 2;2.Uri uri = Uri.parse(content:/contacts/people);3.In
14、tent intent = new Intent(Intent.ACTION_PICK, uri);4.startActivityForResult(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通過Inten
15、t將需要返回的數(shù)據(jù)傳遞給父Activity。數(shù)據(jù)主要是Uri形式,可以附加一些額外信息,這些額外信息用Extra的集合表示Intent功能獲取Activity返值1.Uri data = Uri.parse(tel: + tel_number);2.Intent result = new Intent(null, data);3.result.putExtra(address, );4.setResult(RESULT_OK, result);5.finish();q在父Activity中獲取返回值n當(dāng)子Activity關(guān)閉時,啟動它的父Activity的onActivityResult()函
16、數(shù)將被調(diào)用;如果需要在父Activity中處理子Activity的返回值,則重載此函數(shù)即可n此函數(shù)的語法如下q第1個參數(shù)requestCode,用來表示是哪一個子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ù)1.public void onActivityResult(int requestCode, int resultCode, Intent data);Intent功能獲
17、取Activity返值n下面代碼說明如何在父Activity中處理子Activity的返回值1.private static final int SUBACTIVITY1 = 1;2.private static final int SUBACTIVITY2 = 2;3. 4.Override 5.public void onActivityResult(int requestCode, int resultCode, Intent data)6.Super.onActivityResult(requestCode, resultCode, data);7.switch(requestCode
18、)8.case SUBACTIVITY1:9.if (resultCode = Activity.RESULT_OK)10.Uri uriData = data.getData();11.else if (resultCode = Activity.RESULT_CANCEL)12.13.break;Intent功能獲取Activity返值n第1行代碼和第12行代碼是兩個子Activity的請求碼n第7行代碼對請求碼進(jìn)行匹配n第9行和第11行代碼對結(jié)果碼進(jìn)行判斷q如果返回的結(jié)果碼是Activity.RESULT_OK,則在代碼的第10行使用getData()函數(shù)獲取Intent中的Uri數(shù)據(jù)q
19、如果返回的結(jié)果碼是Activity.RESULT_CANCELED,則不進(jìn)行任何操作14.case SUBACTIVITY2:15.if (resultCode = Activity.RESULT_OK)16.Uri uriData = data.getData();17.18.break;19. 20. Intent功能獲取Activity返值qActivityCommunication示例說明了如何以Sub-Activity方式啟動子Activity,以及使用Intent進(jìn)行組件間通信Intent功能獲取Activity返值父Activity子Activityq當(dāng)用戶點擊“啟動Activi
20、ty1”和“啟動Activity2”按鈕時,程序?qū)⒎謩e啟動子SubActivity1和SubActivity2Intent功能獲取Activity返值qSubActivity1提供了一個輸入框,以及“接受”和“撤銷”兩個按鈕q如果在輸入框中輸入信息后點擊“接受”按鈕,程序會把輸入框中的信息傳遞給其父Activity,并在父Activity的界面上顯示q如果用戶點擊“撤銷”按鈕,則程序不會向父Activity傳遞任何信息Intent功能獲取Activity返值qSubActivity2主要是為了說明如何在父Activity中處理多個子Activity,因此僅提供了用于關(guān)閉SubActivity2
21、的“關(guān)閉”按鈕Intent功能獲取Activity返值qActivityCommunication文件結(jié)構(gòu)Intent功能獲取Activity返值qActivityCommunication.java文件的核心代碼如下1.public class ActivityCommunication extends Activity 2.private static final int SUBACTIVITY1 = 1;3.private static final int SUBACTIVITY2 = 2;4.TextView textView;5.Override6.public void onCre
22、ate(Bundle savedInstanceState) 7. super.onCreate(savedInstanceState);8. setContentView(R.layout.main);9. textView = (TextView)findViewById(R.id.textShow);10. final Button btn1 = (Button)findViewById(R.id.btn1);11. final Button btn2 = (Button)findViewById(R.id.btn2);12. 13. btn1.setOnClickListener(ne
23、w OnClickListener()14.public void onClick(View view)15.Intent intent = new Intent(ActivityCommunication.this, SubActivity1.class);16.startActivityForResult(intent, SUBACTIVITY1);Intent功能獲取Activity返值17. 18. );19. 20.btn2.setOnClickListener(new OnClickListener()21. public void onClick(View view)22.Int
24、ent intent = new Intent(ActivityCommunication.this, SubActivity2.class);23.startActivityForResult(intent, SUBACTIVITY2);24.25. );26. 27. 28. Override29. protected void onActivityResult(int requestCode, int resultCode, Intent data) 30. super.onActivityResult(requestCode, resultCode, data);31.32. swit
25、ch(requestCode)33. case SUBACTIVITY1:Intent功能獲取Activity返值n代碼的第2行和第3行分別定義了兩個子Activity的請求碼n在代碼的第16行和第23行以Sub-Activity的方式分別啟動兩個子Activity34. if (resultCode = RESULT_OK)35. Uri uriData = data.getData();36. textView.setText(uriData.toString();37. 38. break;39. case SUBACTIVITY2:40. break;41. 42. 43. Inten
26、t功能獲取Activity返值n代碼第29行是子Activity關(guān)閉后的返回值處理函數(shù),其中requestCode是子Activity返回的請求碼,應(yīng)該與第2行和第3行定義的兩個請求碼相匹配nresultCode是結(jié)果碼,在代碼第32行對結(jié)果碼進(jìn)行判斷,如果等于RESULT_OK,在第35行代碼獲取子Activity的返回值中的數(shù)據(jù)ndata是返回值,子Activity需要返回的數(shù)據(jù)就保存在data中Intent功能獲取Activity返值qSubActivity1.java的核心代碼如下1.public class SubActivity1 extends Activity 2.Overri
27、de3.public void onCreate(Bundle savedInstanceState) 4.super.onCreate(savedInstanceState);5.setContentView(R.layout.subactivity1);6.final EditText editText = (EditText)findViewById(R.id.edit);7.Button btnOK = (Button)findViewById(R.id.btn_ok);8.Button btnCancel = (Button)findViewById(R.id.btn_cancel)
28、;9.10.btnOK.setOnClickListener(new OnClickListener()11.public void onClick(View view)12.String uriString = editText.getText().toString();13.Uri data = Uri.parse(uriString);14.Intent result = new Intent(null, data);15.setResult(RESULT_OK, result);16.finish();17.Intent功能獲取Activity返值n第13行代碼將EditText控件的
29、內(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 OnClickListener()21.public void onClick(View view)22.setResult(RESULT_CANCELED, null);23.finish();24.25. );26. 2
30、7. Intent功能獲取Activity返值qSubActivity2.java的核心代碼n第10行的setResult()函數(shù)僅設(shè)置了結(jié)果碼,第2個參數(shù)為null,表示數(shù)據(jù)需要傳遞給父Activity1.public class SubActivity2 extends Activity 2.Override3.public void onCreate(Bundle savedInstanceState) 4.super.onCreate(savedInstanceState);5.setContentView(R.layout.subactivity2);6. 7.Button btnR
31、eturn = (Button)findViewById(R.id.btn_return);8.btnReturn.setOnClickListener(new OnClickListener()9.public void onClick(View view)10.setResult(RESULT_CANCELED, null);11.finish();12.13.);14.15. Intent功能獲取Activity返值Intent功能廣播消息n廣播消息qIntent的另一種用途是發(fā)送廣播消息q應(yīng)用程序和Android系統(tǒng)都可以使用Intent發(fā)送廣播消息q廣播消息的內(nèi)容可以與應(yīng)用程序密切相
32、關(guān)的數(shù)據(jù)信息,也可以Android的系統(tǒng)信息,例如網(wǎng)絡(luò)連接變化、電池電量變化、接收到短信和系統(tǒng)設(shè)置變化等等q如果應(yīng)用程序注冊了BroadcastReceiver,則可以接收到指定的廣播消息n廣播信息的使用方法Intent功能廣播消息1.String UNIQUE_STRING = edu.tjut.BroadcastReceiverDemo;2.Intent intent = new Intent(UNIQUE_STRING);3.intent.putExtra(key1, value1);4.intent.putExtra(key2, value2);5.sendBroadcast(inte
33、nt);注意:在構(gòu)造Intent時必須用一個全局唯一的字符串標(biāo)識其要執(zhí)行的動作,通常使用應(yīng)用程序包的名稱BroadcastReceiverActivitySendBroadcast()OnReceive()IntentAndroid操作系統(tǒng)IntentnBroadcastReceiver組件qBroadcastReceiver用于監(jiān)聽廣播消息q可以在AndroidManifest.xml文件或在代碼中注冊一個BroadcastReceiver,并在其中使用Intent 過濾器指定要處理的廣播消息q創(chuàng)建BroadcastReceiver需繼承BroadcastReceiver類,并重載onRec
34、eive()方法。代碼如下1.public class MyBroadcastReceiver extends BroadcastReceiver 2.Override3.public void onReceive(Context context, Intent intent) 4./TODO: React to the Intent received.5.6.Intent功能廣播消息qBroadcastReceiver的應(yīng)用程序不需要一直運(yùn)行,當(dāng)Android系統(tǒng)接收到與之匹配的廣播消息時,會自動啟動此BroadcastReceiverq基于以上的特征,BroadcastReceiver適合
35、做一些資源管理的工作q在BroadcastReceiver接收到與之匹配的廣播消息后,onReceive()方法會被調(diào)用qonReceive()方法必須要在5秒鐘執(zhí)行完畢,否則Android系統(tǒng)會認(rèn)為該組件失去響應(yīng),并提示用戶強(qiáng)行關(guān)閉該組件Intent功能廣播消息qBroadcastReceiverDemon在點擊“發(fā)生廣播消息”按鈕后,EditText控件中內(nèi)容將以廣播消息的形式發(fā)送出去,n示例內(nèi)部的BroadcastReceiver將接收這個廣播消息,并顯示在用戶界面的下方Intent功能廣播消息qBroadcastReceiverDemo.java文件中包含發(fā)送廣播消息的代碼,其關(guān)鍵代碼
36、如下n第3行代碼創(chuàng)建Intent,將edu.hrbeu.BroadcastReceiverDem作為識別廣播消息的字符串標(biāo)識n第4行代碼添加了額外信息n第5行代碼調(diào)用sendBroadcast()函數(shù)發(fā)送廣播消息1.button.setOnClickListener(new OnClickListener()2.public void onClick(View view)3.Intent intent = new Intent(edu.tjut.BroadcastReceiverDemo);4.intent.putExtra(message, entryText.getText().toStr
37、ing();5.sendBroadcast(intent);6.7.);Intent功能廣播消息q為了能夠使應(yīng)用程序中的BroadcastReceiver接收指定的廣播消息,首先要在AndroidManifest.xml文件中添加Intent過濾器,聲明BroadcastReceiver可以接收的廣播消息qAndroidManifest.xml文件的完整代碼如下.2.Intent功能廣播消息n第14行代碼中創(chuàng)建了一個節(jié)點n在第15行中聲明了Intent過濾器的動作為“edu.hrbeu.BroadcastReceiverDemo”,這與BroadcastRece
38、iverDemo.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文件定義的廣播消息后,程序?qū)⒆詣诱{(diào)用onRev
39、eive()函數(shù)1.public class MyBroadcastReceiver extends BroadcastReceiver 2.Override3.public void onReceive(Context context, Intent intent) 4.String msg = intent.getStringExtra(message);5.Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();6.7.Intent功能廣播消息n第4行代碼通過調(diào)用getStringExtra()函數(shù),從Intent中獲取標(biāo)識為mes
40、sage的字符串?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í)行的動
41、作,通常使用Java類名和包的完全限定名構(gòu)成Category(類別)動作執(zhí)行的環(huán)境Data(數(shù)據(jù))動作處理的數(shù)據(jù),為URI格式Extra(額外數(shù)據(jù))額外的數(shù)據(jù)Flag(標(biāo)志)新啟動的組件是否運(yùn)行在新的進(jìn)程中nIntent過濾器qIntent過濾器是一種根據(jù)Intent中的動作(Action)、類別(Categorie)和數(shù)據(jù)(Data)等內(nèi)容,對適合接收該Intent的組件進(jìn)行匹配和篩選的機(jī)制qIntent過濾器可以匹配數(shù)據(jù)類型、路徑和協(xié)議,還包括可以用來確定多個匹配項順序的優(yōu)先級(Priority)q應(yīng)用程序的Activity組件、Service組件和BroadcastReceiver都可以
42、注冊Intent過濾器,則這些組件在特定的數(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)的動作,用字符串表示,通常使
43、用Java類名和包的完全限定名構(gòu)成android:category指定以何種方式去服務(wù)Intent請求的動作android:host指定一個有效的主機(jī)名android:mimetype指定組件能處理的數(shù)據(jù)類型android:path有效的URI路徑名android:port主機(jī)的有效端口號android:scheme所需要的特定的協(xié)議Intent過濾器q標(biāo)簽用來指定Intent過濾器的服務(wù)方式,每個Intent過濾器可以定義多個標(biāo)簽,程序開發(fā)人員可使用自定義的類別,或使用Android系統(tǒng)提供的類別qAndroid系統(tǒng)提供的類別值值說明說明DEFAULT為Intent過濾器中定義的數(shù)據(jù)提供默認(rèn)
44、動作ALTERNATIVEIntent數(shù)據(jù)默認(rèn)動作的一個可替換的執(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)便知道了如何將任意一個Int
45、ent請求通過Intent過濾器映射到相應(yīng)的組件上Intent過濾器nIntent解析qIntent到Intent過濾器的映射過程稱為“Intent解析”qIntent解析可以在所有的組件中,找到一個可以與請求的Intent達(dá)成最佳匹配的Intent過濾器qIntent解析的匹配規(guī)則nAndroid系統(tǒng)把所有應(yīng)用程序包中的Intent過濾器集合在一起,形成一個完整的Intent過濾器列表n在Intent與Intent過濾器進(jìn)行匹配時,Android系統(tǒng)會將列表中所有Intent過濾器的“動作”和“類別”與Intent進(jìn)行匹配,任何不匹配的Intent過濾器都將被過濾掉。n沒有指定“動作”的In
46、tent過濾器可以匹配任何的Intent,n但是沒有指定“類別”的Intent過濾器只能匹配沒有“類別”的IntentIntent過濾器n把Intent數(shù)據(jù)Uri的每個子部與Intent過濾器的標(biāo)簽中的屬性進(jìn)行匹配,如果標(biāo)簽指定了協(xié)議、主機(jī)名、路徑名或MIME類型,那么這些屬性都要與Intent的Uri數(shù)據(jù)部分進(jìn)行匹配,任何不匹配的Intent過濾器均被過濾掉n如果Intent過濾器的匹配結(jié)果多于一個,則可以根據(jù)在標(biāo)簽中定義的優(yōu)先級標(biāo)簽來對Intent過濾器進(jìn)行排序,優(yōu)先級最高的Intent過濾器將被選擇Intent過濾器nIntentResolutionDemo示例qIntentResolu
47、tionDemo示例說明了如何在AndroidManifest.xml文件中注冊Intent過濾器,以及如何設(shè)置節(jié)點屬性來捕獲指定的IntentqAndroidManifest.xml的完整代碼如下. 9.10. 11. 12.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,類別是and
48、ent.category.LAUNCHER。由過濾器的動作和類別可知,這個Activity是應(yīng)用程序啟動后顯示的缺省用戶界面n第1620行是第2個Activity的Intent過濾器,過濾器的動作是ent.action.VIEW,表示根據(jù)Uri協(xié)議,以最佳的方式啟動相應(yīng)的Activity;類別是ent.category.DEFAULT,表示數(shù)據(jù)的默認(rèn)動作;數(shù)據(jù)的協(xié)議部分是android:scheme=schemodemo,數(shù)據(jù)的主機(jī)名稱部分是android:host=edu.tjutIntent過濾器nIntentResolutionDemo.java文件中Intent實例化和啟動Activity的代碼如下n第1行代碼定義的Inte
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 成都文理學(xué)院《化工原理D》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都農(nóng)業(yè)科技職業(yè)學(xué)院《EP沙盤模擬》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都航空職業(yè)技術(shù)學(xué)院《面向?qū)ο髴?yīng)用開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都理工大學(xué)《學(xué)術(shù)英語音樂》2023-2024學(xué)年第一學(xué)期期末試卷
- 農(nóng)田換土施工方案
- 2024年許可合同無人機(jī)飛行許可合同
- 鎏金字施工方案
- 2025年度旅游車租賃+導(dǎo)游講解+特色餐飲+景點門票套餐合同2篇
- 2025室內(nèi)設(shè)計木工施工協(xié)議3篇
- 2025年精密陶瓷劈刀項目合作計劃書
- 2024年領(lǐng)導(dǎo)干部任前廉政知識考試測試題庫及答案
- 中醫(yī)辨證-八綱辨證(中醫(yī)學(xué)課件)
- 冠脈介入進(jìn)修匯報
- 蔣詩萌小品《誰殺死了周日》臺詞完整版
- 生涯發(fā)展展示
- ICU病人早期康復(fù)-ppt課件
- 藥品開發(fā)與上量-宿家榮
- 北京海淀區(qū)初一上數(shù)學(xué)期末試題(帶標(biāo)準(zhǔn)答案)_
- 化工原理課程設(shè)計空氣中丙酮的回收工藝操作
- 廠房施工總結(jié)報告
- 先進(jìn)物流理念主導(dǎo)和先進(jìn)物流技術(shù)支撐下的日本現(xiàn)代物流
評論
0/150
提交評論