android Intent和IntentFilter
android的應用程序包含三種重要的組件:Activity、Service、BroadcastReceiver,應用程序采用一致的方式來啟動他們——都是依靠Intent來進行啟動。Intent就封裝了程序想要啟動的程序意圖,不僅如此,Intent還可用于與被啟動組件交換信息。
?
Intent的屬性及intent-filter配置:
Intent的Component屬性需要接受一個ComponentName對象,ComponentName對象包含如下幾個構造器:
1、ComponentName(String pkg, String cls):創建pkg所在包下的cls類對應的組件
2、ComponentName(Context pkg, String cls):創建pkg所對應的包下的cls類所對應的組件
3、ComponentName(Context pkg, Class<?> cls):創建pkg所對應的包下的cls類所對應的組件
?
上面構造器的本質就是一個,這說明創建一個ComponentName需要指定包名和類名——這就可以唯一地確定一個組件類,這樣應用程序即可根據給定的組件類去啟動特定的組件。
?
ComponentName comp = new ComponentName(this, NewActivity.class); Intent intent = new Intent(); intent.setComponent(comp);startActivity(intent);上面的也可以寫成如下的形式:
Intent intent = new Intent(this, NewActivity.class);
當程序通過Intent的Component屬性(明確指定啟動那個組件)啟動組件時,被啟動的組件幾乎不再需要使用<inetnt-filter....../>元素進行配置了。
?
Action、Category屬性與intent-filter配置
Intent intent = new Intent(); // 為Intent對象設置Action屬性(屬性值是一個普通的字符串) intent.setAction("helloworld"); startActivity(intent);上面的代碼會根據Intent來啟動Activity,但是Intent并未以“硬編碼”的方式指定要啟動那么Activity,程序到底會啟動那個Activity這取決于Activity配置中<intent-filter....../>元素的配置。
<inetnt-filter....../>元素里通常可包含如下的子元素:
1、0~N個<action....../>子元素
2、0~N個<categtory....../>子元素
3、0~1個<data....../>子元素
一個Intent對象只能包含一個Action屬性,程序可以調用Intent的setAction(String str)方法來設置Action屬性,但是一個Intent對象可以包含多個Category屬性,程序可以調用Intent的addCategpry(String str)方法添加Category。當程序創建Intent時,該Intent默認啟動Category屬性值為Intent.CATEGORY_DEFAULT常量(常量的值為android.intent.category.DEFAULT)的組件。當Activity配置中的<action....../>中有一個和Intent中的action屬性相同時,就表明該Activity能響應該Intent。
?
可以通過指定Action、Category調用系統的Activity。
?
Data、Type屬性與intent-filter配置:
Data屬性通常用于向Action屬性提供操作的數據,Data屬性接受一個Uri對象,一個Uri對象通常如下形式的字符串來表示:
content://com.android.contacts/contacts/1
tel:123
上面所示的兩個字符串的冒號前面大致指定了數據的類型,冒號后面的是數據部分。因此一個合法的Uri對象既可以決定操作那種類型的數據,又可指定具體的數據值。
?
Type屬性則用于明確指定Data屬性指定數據的類型或者MIME類型。
?
實際上Data屬性值可以分為兩部分:數據類型部分和數據部分。例如:content://com.android.contacts/contacts/1
content:前綴:表明該數據類型為聯系人信息。
//com.android.contacts/contacts/1:表明操作_id為1的聯系人數據
?
一旦為Intent同時指定了Action、Data屬性,那么android講可根據指定的數據類型來啟動特定的應用程序,并對指定的數據執行相應的操作。
?
Extra屬性:
Intent的Extra屬性通常用于在多個Action之間進行數據交換,Intent的Extra屬性值是一個Bundle對象,Bundle對象就像一個Map對象,可以存放多組key-value對,這樣就可以通過在不同的Activity之間進行數據交換。
?
轉載于:https://www.cnblogs.com/heml/p/3564767.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android Intent和IntentFilter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据/proc/meminfo对空闲内存
- 下一篇: TIJ摘要:访问控制权限