**3,Action、Category屬性與intent-filter配置**
Intent的Action和Category屬性都是一個普通的字符串,其中Action代表該Intent所要完成的一個抽象“動作”,Category則用于為Action增加額外的附加類別信息,通常,Action與Category結合使用。
元素里通常可包括如下子元素:
a、0~N個子元素
b、0~N個子元素
c、0~1個子元素
子元素的配置非常簡單,它們都可指定android:name屬性,該屬性的值就是一個普通字符串。
當元素里的子元素里包含多個子元素(相當于指定了多個字符串)時,就表明該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";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bn = (Button) findViewById(R.id.bn);
bn.setOnClickListener(new OnClickListener()
{
@Override
public 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
{
@Override
public 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-sdk
android: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/:顯示所有聯系人列表的信息,通過這種組合可以方便地查看系統聯系人
- 前言
- Eclipse搭建android環境及Genymotion模擬器安裝問題解決方法
- 表格布局(TableLayout)及重要屬性
- 幀布局(FrameLayout)及屬性
- layout_width和width,layout_height和height
- UI組件之TextView及其子類
- UI組件之TextView及其子類(一)TextView和EditText
- UI組件之TextView及其子類(二)RadioButton和CheckBox
- UI組件之TextView及其子類(三)ToggleButton和Switch
- UI組件之TextView及其子類(四)AnalogClock,DigitalClock
- UI組件之TextView及其子類(五)計時器Chronometer
- UI組件之ImageView及其子類(一)ImageView顯示圖片
- UI組件之ImageView及其子類(二)ImageButton ,ZoomButton
- UI組件之AdapterView及其子類關系,Adapter接口及其實現類關系
- UI組件之AdapterView及其子類(一)三種Adapter適配器填充ListView
- UI組件之AdapterView及其子類(二)GridView網格視圖的使用
- UI組件之AdapterView及其子類(三)Spinner控件詳解
- UI組件之AdapterView及其子類(四)Gallery畫廊控件使用
- UI組件之AdapterView及其子類(五)ListView組件和ListActivity
- UI組件之AdapterView及其子類(六)ExpandableListView組件和ExpandableListActivity的使用
- UI組件之 ProgressBar及其子類(一)ProgressBar進度條的使用
- UI組件之ProgressBar及其子類(二)SeekBar拖動條和RatingBar星級評分條的使用
- ViewFlipper的功能和用法
- Toast的功能和用法
- TabHost選項卡的 功能和用法
- AlertDialog創建6種對話框的用法
- Android基于監聽的事件處理機制
- Android基于回調的事件處理
- Handler消息傳遞機制(一)
- Handler消息傳遞機制(二)Handler,Loop,Message,MessageQueue的工作原理
- 啟動Activity的兩種方式startActivity和startActivityForResult(一)
- 啟動Activity的兩種方式startActivity和startActivityForResult(二)
- Activity的生命周期理解
- Bundle在Activity之間交換數據
- 通過 Intent 傳遞類對象
- Intent對象詳解(一)
- Intent對象詳解(二)
- 使用指定的Action,Category調用系統Activity
- 使用Action,Data屬性啟動系統Activity
- Android數據存儲的三種方式-SharedPrefrences,File,SQLite