//打開指定網頁
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));
startActivity(intent);
//進行關鍵字搜索
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "android"); //keywords: android
startActivity(intent);
//
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:235345"));
startActivity(intent);
Uri.parse("prefix:num")
// “http:”或“https:”表示網絡地址類型,
// “tel:”表示電話號碼類型,“mailto:”表示郵件地址類型,等
在目標<data/>標簽中包含了以下幾種子元素,他們定義了url的匹配規則:
android:scheme 匹配url中的前綴,除了“http”、“https”、“tel”...之外,我們可以定義自己的前綴
android:host 匹配url中的主機名部分,如“google.com”,如果定義為“*”則表示任意主機名
android:port 匹配url中的端口
android:path 匹配url中的路徑
// for example:
<activity android:name=".TargetActivity">
<intent-filter>
<action android:name="com.scott.intent.action.TARGET"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="scott" android:host="com.scott.intent.data" android:port="7788" android:path="/target" />
</intent-filter>
</activity>
<-- android:pathPrefix="/target"
scott://com.scott.intent.data:7788/target/hello
-->
Intent intent = new Intent("com.scott.intent.action.TARGET");
intent.setData(Uri.parse("scott://com.scott.intent.data:7788/target"));//merge
startActivity(intent);
// put Bundle Data
Intent intent = new Intent("xxxxx");
Bundle bundle = new Bundle();
bundle.putInt("id", 0);
bundle.putString("name", "scott");
intent.putExtras(bundle);
startActivity(intent);
// get Bundle Data
Bundle bundle = intent.getExtras();
int id = bundle.getInt("id");
String name = bundle.getString("name");
or
int id = intent.getIntExtra();
String name = intent.getStringExtra();
也可以使用Intent的getIntExtra和getStringExtra方法獲取,其數據源都是Intent中的Bundle類型的實例對象
以上涉及到了Intent的三個屬性:
Intent包括以下屬性:
1.action,要執行的動作
2.data和extras,即執行動作要操作的數據和傳遞到目標的附加信息
3.category,要執行動作的目標所具有的特質或行為歸類
<category android:name="android.intent.category.LAUNCHER" />
幾個常見的category如下:
Intent.CATEGORY_DEFAULT (android.intent.category.DEFAULT) //默認的category
Intent.CATEGORY_PREFERENCE (android.intent.category.PREFERENCE) // 表示該目標Activity是一個首選項界面
Intent.CATEGORY_BROWSABLE (android.intent.category.BROWSABLE) //指定了此category后,在網頁上點擊圖片或鏈接時,系統會考慮將此目標Activity列入可選列表,供用戶選擇以打開圖片或鏈接。
intent.addCategory(String category); //在為Intent設置category時,應使用addCategory(String category)方法向Intent中添加指定的類別信息,來匹配聲明了此類別的目標Activity。
4.type:要執行動作的目標Activity所能處理的MIME數據類型
例如:一個可以處理圖片的目標Activity在其聲明中包含這樣的mimeType:
<data android:mimeType="image/*">
在使用Intent進行匹配時,我們可以使用setType(String type)或者setDataAndType(Uri data, String type)來設置mimeType。
setType(String type)
setDataAndType(Uri data, String type)
5.component,目標組件的包或類名稱
在使用component進行匹配時,一般采用以下幾種形式:
intent.setComponent(new ComponentName(getApplicationContext(), TargetActivity.class));
intent.setComponent(new ComponentName(getApplicationContext(), "com.scott.intent.TargetActivity"));
intent.setComponent(new ComponentName("com.scott.other", "com.scott.other.TargetActivity"));
其中,前兩種是用於匹配同一包內的目標,第三種是用於匹配其他包內的目標。需要注意的是,如果我們在Intent中指定了component屬性,系統將不會再對action、data/type、category進行匹配。
Activity:
startActivity(), startActivityForResult()
Service:
startService(), bindService()
Broadcasts:
sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()
activity.setResult() --> startActivityForResult()
+++++++++++++++++++++++++++++++++++++++++++++++++
Intent對象由以下六個部分組成:
1.Component name
2.Action
3.Data
4.Category
5.Extras
6.Flags
Component name
Component name即組件名稱,是要處理這個Intent對象的組件名稱。
組件名稱對象由ComponentName類來封裝,組件名稱包含包名稱和類名稱,被聲明在AndroidManifest.xml文件中。
組件名稱通過 setComponent(),setClass(),setClassName()設置,通過getComponent()獲取。
需要注意的是Component name是一個可選項,如果被設置,那么Intent對象就顯式指定了要轉向的組件,如果沒有被設置,則Intent對象需要根據其他信息進行篩選查找。
Action
Action是指Intent要完成的動作,是一個字符串常量。
ACTIONS:
ACTION_CALL, ACTION_EDIT, ACTION_MAIN, ACTION_SYNC,
ACTION_BATTERY_LOW, ACTION_HEADSET_PLUG, ACTION_SCREEN_ON,
ACTION_TIMEZONE_CHANGED
使用 setAction() 和 getAction()來設置和讀取Action屬性。
Data
Data屬性是執行動作的URI和MIME類型,不同的動作有不同的數據規格。
比如,Action是ACTION_EDIT時,數據域將是文檔的URI;Action是ACTION_CALL時,數據域是 tel: URI ,帶有要撥打的電話號碼;如果Action是 ACTION_VIEW,則數據域是http: URI。
當匹配intent和能夠處理intent所帶的數據的組件時,知道數據類型(MIME類型)是很重要的。比如,一個展示圖像的組件不應該被叫去播放一個音頻。
很多情況下,從URI可以看出數據類型,比如content: URIs,表示數據是在設備上,但是是由content provider控制。
數據類型也可以顯式指定,比如setData()方法指定數據為URI,setType() 指定為MIME type,setDataAndType() 指定它既為URI又為MIME type。讀取的時候URI用getData(),MIME type用getType()。
Category
Category是一個字符串,提供了額外的信息,有關於能夠處理這個Intent對象的組件種類。
一個Intent對象中可以包含任意數量的category描述信息。
與category相應的方法有添加addCategory()、移除removeCategory() 和獲取所有category getCategories() 。
Extras
傳遞給Intent的額外數據,以Bundle的形式定義,就是一些鍵值對。
數據可以被作為一個Bundle對象被使用,利用 putExtras() 和 getExtras() 方法。
Flags
各種類型的Flag。很多是用來指定Android系統如何啟動activity,還有啟動了activity后如何對待它。所有這些都定義在Intent類中。
+++++++++++++++++++++++++++++++++++++++++++++++++
<data android:mimeType="video/mpeg" android:scheme="http">
<data android:mimeType="audio/mpeg" android:scheme="http">
每一個<data>元素可以指定一個URI和一個數據類型(MIME media type)。
每一個URI包含下列屬性:
scheme, host, port, path
如:scheme://host:port/path
例如,在下面的URI中:
content://com.example.project:200/folder/subfolder/etc