一、手機安卓系統開發中的Intent是什么,作用是什么?
Android的應用程序包括三大組件:Activity、Service、BroadcastReceiver,為了方便不同組件之間的交流通信,應用程序就采用了一種統一的方式啟動組件及傳遞數據,即使用Intent。 Intent封裝了Android應用程序需要啟動某個組件的"意圖",Intent類的對象是組件間的通信載體,一個Intent對象就是一組信息,其包含接收Intent組件所關心的信息(如action 和 Data)和Android 系統關心的信息(如Category等)。也就是說,發送"意圖"的組件通過Intent對象所包含的內容,來啟動指定的(即Component屬性)或通過篩選(即Action&Category屬性)的某(些)組件,然后實施相應的動作(即Action屬性)并傳遞相應的數據(即Data屬性)以便完成相應的動作。
二、手機安卓系統開發中的Intent的Component屬性
Component需要指定包名和類名唯一確定一個組件類,代碼如下:
intent=new Intent();
ComponentName com_name=new ComponentName(MainActivity.this,Component.class);
intent.setComponent(com_name);
展示結果的代碼:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_component);
ComponentName com_name=getIntent().getComponent();
TextView text=(TextView)findViewById(R.id.textView1);
text.setText("組件包名:"+com_name.getPackageName()+"\n組件類名:"+com_name.getClassName());
運行截圖:
點擊第一個按鈕顯示運行結果。
三、手機安卓系統開發中的Intent的Action、Category屬性
使用Action和Category需要在程序清單文件androidMinifest.xml文件中進行配置,代碼如下:
<activity
android:name=".Action">
<intent-filter>
<action android:name="cn.wangbaiyuan.task5.action" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="cn.wangbaiyuan.category_action" />
</intent-filter>
</activity>
使用Action、category啟動這個Activity的代碼為:
intent=new Intent();
intent.setAction("cn.wangbaiyuan.task5.action");
intent.addCategory("cn.wangbaiyuan.category_action");
展示結果的代碼:
setContentView(R.layout.activity_component);
TextView text=(TextView)findViewById(R.id.textView1);
text.setText("此activity由含有action和category的intent啟動\nAction:"+getIntent().getAction()+"\ncategory:"+getIntent().getCategories());
截圖:
Intent的Action、category屬性
四、手機安卓系統開發中的Intent的Data、Type屬性
Data屬性通常用于向Action屬性提供操作的數據,Data屬性接受一個Uri對象,一個Uri對象通過如下形式的字符串來表示:
content://www.menbi.cn/
tel:1880000000
冒號前面指定了數據的類型,后面的是數據部分。
Type屬性則用于明確指定Data屬性的數據類型或MIME類型,但是通常來說,當Intent不指定Data屬性時Type屬性才會起作用,否則Android系統將會根據Data屬性值來分析數據的類型,所以無需指定Type屬性。
一旦為Intent同時指定了Action和Data屬性,那么Android將可根據指定的數據類型來啟動特定的應用程序,并對指定的數據執行相應的操作。
在我的代碼文件中我分別測試了5個用Activity和Data組合的情況,為五個按鈕分別設置一下監聽器:
public OnClickListener scheme=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
// 只設置Intent的Data屬性
intent.setData(Uri.parse("lee://www.baidu.com:1234/test"));
startActivity(intent);
}
};
public OnClickListener schemeHostPort=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
// 只設置Intent的Data屬性
intent.setData(Uri.parse("lee://wangbaiyuan.cn:8888/test"));
startActivity(intent);
}};
public OnClickListener schemeHostPath=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
// 只設置Intent的Data屬性
intent.setData(Uri.parse("lee://wangbaiyuan.cn:1234/android"));
startActivity(intent);
}};
public OnClickListener schemeHostPortPath=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
// 只設置Intent的Data屬性
intent.setData(Uri.parse("lee://wangbaiyuan.cn:8888/android"));
startActivity(intent);
}};
public OnClickListener schemeHostPortPathType=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
// 同時設置Intent的Data、Type屬性
intent.setDataAndType(Uri.parse("lee://wangbaiyuan.cn:8888/android")
, "abc/xyz");
startActivity(intent);
}};
public OnClickListener systemActivity=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
// 同時設置Intent的Data、Type屬性
intent.setData(Uri.parse("http://wangbaiyuan.cn"));
startActivity(intent);
}};
運行截圖:
Intent的Data、Type屬性Intent的Data、Type屬性
五、手機安卓系統開發中的Intent創建Tab頁面:
代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
TabHost tabhost=getTabHost();
tabhost.addTab(tabhost.newTabSpec("tab1")
.setIndicator("IT業界",getResources().getDrawable(R.drawable.ic_launcher))
.setContent(new Intent(this,webview.class)
.putExtra("url", "http://wangbaiyuan.cn/itindustry"))
);
tabhost.addTab(tabhost.newTabSpec("tab2")
.setIndicator("程序算法")
.setContent(new Intent(this,webview.class)
.putExtra("url", "http://wangbaiyuan.cn/code"))
);
tabhost.addTab(tabhost.newTabSpec("tab3")
.setIndicator("電腦技巧")
.setContent(new Intent(this,webview.class)
.putExtra("url", "http://wangbaiyuan.cn/computer-experience"))
);
tabhost.addTab(tabhost.newTabSpec("tab3")
.setIndicator("關于我")
.setContent(new Intent(this,webview.class)
.putExtra("url", "http://wangbaiyuan.cn/leave-message/about"))
);
}
運行結果:
Intent創建tab頁面