1悔捶、什么是Intent
首先铃慷,Intent翻譯作意圖,對于 初次接觸蜕该,我們可以理解做發(fā)起請求讓其他組件或活動執(zhí)行某一動作犁柜。Intent是Android應用程序中組件與組件(活動和活動之間通信的中間橋梁);不僅可以指定組件的特定動作執(zhí)行堂淡,還可以在不同Activity之間傳遞數(shù)據(jù)馋缅。一般情況下坛怪,Intent用于啟動活動、啟動服務以及發(fā)送廣播股囊。
1.1、Intent有顯示和隱式之分更啄,下面 我們先介紹一下顯示Intent的用法
Intent intent=new Intent();//先創(chuàng)建一個Intent對象
//指定Intent要執(zhí)行的動作
intent.setClass(MainActivity.this,SecondActivity.class);
//啟動Intent
startActivity(intent);
Intent有多個構(gòu)造函數(shù)稚疹,我們選擇最基本的來說,Intent(Context packageContent ,class<?>cls);
該構(gòu)造方法接受兩個參數(shù)祭务,其中Context packageContent 是為其指定當前啟動活動的上下文對象内狗,我們一般就選擇當前活動的上下文對象MainActivity.this;另外接收的第二個參數(shù)是class<?>cls义锥;該參數(shù)是我們要跳轉(zhuǎn)的目標活動(SecondActivity)柳沙。
這樣理解來看,我們“意圖”就體現(xiàn)的很明確了拌倍。最后我們通過startActivity()這一方法來啟動intent.此方法接收我們創(chuàng)建的intent對象作為啟動的參數(shù)赂鲤。、
2柱恤、隱式Intent
相比于顯式Intent数初,隱式Intent則更加豐富含蓄。他的意圖并不明確指定我們要啟動的Activity,而是在Activity的清單配置文件中進行聲明響應:
在AndroidMainfest文件下梗顺,通過在Activity的標簽下配置<intent-filter>的內(nèi)容泡孩,可以指定當前活動能夠響應的action和category。在AndroidMainfest.xml文件下寺谤,我們添加上如下代碼
<activity android:name=".SecondActivity ">
<intent-filter>
<action android:name="com.example.activitytest.ACTION._START"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</actiivity>
只有<action>和<category>中的內(nèi)容能夠完全匹配上intent中指定的action和category時仑鸥,這個活動才能夠響應該intent.所以在FirstActivity中我們這樣寫:
button1.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View view) {
Intent intent=new Intent("com.example.activitytest.ACTION._START");
startActivity(intent);
}
});
在這個activity中我們創(chuàng)建了一個新的Intent。并把我們在AndroidMianfes 中的SecondActivity的action:(com.example.activitytest.ACTION._START)傳入作為啟動Intent的參數(shù)变屁。
另外由于我們的category聲明了是Default屬性眼俊,所以在intent中,我們不需要改動敞贡,而是在StratActivity()函數(shù)的回調(diào)中泵琳,intent直接載入category就行。
同時誊役,我們也是可以自己定義category的获列,如下:
button1.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View view) {
Intent intent=new Intent("com.example.activitytest.ACTION._START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}
});
此時需要注意的是:我們必須在清單文件中為其聲明注冊這個category
<category android:name="com.example.activitytest.MY_CATEGORY"/>
3、intent的更多用法:
顯示網(wǎng)頁
Intent it = new Intent(Intent.ACTION_VIEW);
intent.setData( Uri.parse("http://www.baidu.com"));
startActivity(intent);
為了讓程序知道這是一個Http請求蛔垢,我們需要在 清單文件聲明data的數(shù)據(jù)協(xié)議
<data android:scheme="http"/>
打開撥號界面
Intent intent =new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
直接調(diào)用撥打電話
Intent intent =new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
//要使用這個必須在配置文件中加入相應的permission
調(diào)用發(fā)送短信的程序
Intent it = new Intent(Intent.ACTION_VIEW);
it.putExtra("sms_body", "The SMS text");
it.setType("vnd.android-dir/mms-sms");
startActivity(it);
發(fā)送短信
Uri uri = Uri.parse("smsto:0800000123");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra("sms_body", "The SMS text");
startActivity(it);
下一節(jié)我們繼續(xù)Intent的啟動活動傳遞數(shù)據(jù)