Intent对象详解(二)
3,Action、Category屬性與intent-filter配置
Intent的Action和Category屬性都是一個普通的字符串,其中Action代表該Intent所要完成的一個抽象“動作”,Category則用于為Action增加額外的附加類別信息,通常,Action與Category結合使用。
<intent-filter.../>元素里通常可包括如下子元素:a、0~N個<action.../>子元素
b、0~N個<category.../>子元素
c、0~1個<data.../>子元素
<action.../><category.../>子元素的配置非常簡單,它們都可指定android:name屬性,該屬性的值就是一個普通字符串。
當<activity.../>元素里的<intent-filter.../>子元素里包含多個<action.../>子元素(相當于指定了多個字符串)時,就表明該Activity能響應Action屬性值為其中任意一個字符串的Intent。
一個Intent對象最多只能包括一個Action屬性,程序調用Intent的setAction(String str)方法來設置Action屬性值;但一個Intent對象可包含多個Category屬性,調用Intent的addCategory(String str)方法添加。
當程序創建Intent時,該Intent默認啟動Category屬性值為Intent.CATEGORY_DEFAULT常量(常量值為android.intent.category.DEFAULT)的組件。
public class ActionCateAttr extends Activity {// 定義一個Action常量final static String _ACTION = "com.intent.action._ACTION";// 定義一個Category常量final static String _CATEGORY ="com.intent.category._CATEGORY";@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button bn = (Button) findViewById(R.id.bn);bn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){Intent intent = new Intent();// 設置Action屬性intent.setAction(ActionCateAttr._ACTION);// 添加Category屬性intent.addCategory(ActionCateAttr._CATEGORY);startActivity(intent);}});} } public class SecondActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.second);EditText show = (EditText) findViewById(R.id.show);// 獲取該Activity對應的Intent的Action屬性String action = getIntent().getAction();// 顯示Action屬性show.setText("Action為:" + action);EditText cate = (EditText) findViewById(R.id.cate);// 獲取該Activity對應的Intent的Category屬性Set<String> cates = getIntent().getCategories();// 顯示Action屬性cate.setText("Category屬性為:" + cates);} }Manifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="org.crazyit.intent"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="17" /><application android:icon="@drawable/ic_launcher" android:label="@string/app_name"><activity android:name=".ActionCateAttr"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".SecondActivity"android:label="@string/app_name"><intent-filter><!-- 指定該Activity能響應action為指定字符串的Intent --><action android:name="com.intent.action._ACTION" /><!-- 指定該Activity能響應category為指定字符串的Intent --><category android:name="com.intent.category.CRAZYIT_CATEGORY" /><!-- 指定該Activity能響應category為android.intent.category.DEFAULT的Intent --><category android:name="android.intent.category.DEFAULT" /> </intent-filter></activity></application><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /></manifest> 3、Data、Type屬性與intent-filter配置
Data屬性通常用于向Action屬性提供操作的數據,Data屬性接收一個Uri對象,一個Uri對象通常通過如下形式的字符串表示:
content://com.android.contracts/contacts/1
tel:123
上面兩個字符串的冒號前面大致指定了數據的類型,冒號后面是數據部分。
Uri字符串總滿足如下格式:
scheme://host.port/path
Type屬性則用于明確指定Data屬性所指定數據的類型或MIME類型,當Intent不指定Data屬性時Type屬性才會起作用,否則Android系統將會根據Data屬性值來分析數據的類型,因此無需指定Type屬性。
一旦為Intent同時指定Action、Data屬性,那么Android將可根據指定的數據類型來啟動特定的應用程序,并對指定數據執行相應的操作。下面介紹幾個Action、Data屬性的組合:
ACTION_VIEW content://com.android.contacts/contacts/1:顯示標識為1的聯系人的信息
ACTION_EDIT content://com.android.contacts/contacts/1:編輯標識為1的聯系人的信息
ACTION_DIAL content://com.android.contacts/contacts/1:顯示向標識為1的聯系人撥號的界面
ACTION_VIEW tel:123:顯示向指定號碼123撥號的界面
ACTION_DIAL tel:123:顯示向指定號碼123撥號的界面
ACTION_VIEW content://contacts/people/:顯示所有聯系人列表的信息,通過這種組合可以方便地查看系統聯系人
總結
以上是生活随笔為你收集整理的Intent对象详解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intent对象详解(一)
- 下一篇: 使用指定的Action,Category