第二天:Intent學習記錄詳解

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有多個構造函數(shù),我們選擇最基本的來說,Intent(Context packageContent ,class<?>cls);

該構造方法接受兩個參數(shù),其中Context packageContent 是為其指定當前啟動活動的上下文對象,我們一般就選擇當前活動的上下文對象MainActivity.this;另外接收的第二個參數(shù)是class<?>cls;該參數(shù)是我們要跳轉的目標活動(SecondActivity)。

這樣理解來看,我們“意圖”就體現(xiàn)的很明確了。最后我們通過startActivity()這一方法來啟動intent.此方法接收我們創(chuàng)建的intent對象作為啟動的參數(shù)。、


2、隱式Intent

相比于顯式Intent,隱式Intent則更加豐富含蓄。他的意圖并不明確指定我們要啟動的Activity,而是在Activity的清單配置文件中進行聲明響應:

在AndroidMainfest文件下,通過在Activity的標簽下配置<intent-filter>的內容,可以指定當前活動能夠響應的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>中的內容能夠完全匹配上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ù)的回調中,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);

直接調用撥打電話

Intent intent =new Intent(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:10086"));

startActivity(intent);

//要使用這個必須在配置文件中加入相應的permission

調用發(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ù)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • (1)鬧鐘 創(chuàng)建鬧鐘(ACTION_SET_ALARM)示例Intent: 注:為了調用ACTION_SET_AL...
    sunnygarden閱讀 1,811評論 0 10
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,362評論 0 17
  • Intent是四大組件間傳值的紐帶 Intent通過下面的屬性來描述以上的某個意圖: 1、Action(動作):用...
    Kevin_Curry閱讀 910評論 0 2
  • 去過一些地方,大多麻木無感,偶爾愛上一個地方,需要一些緣分,一點時間。 初來上海,是世博那年,只記得年輕的奔走,是...
    fall_Provence閱讀 386評論 0 0
  • 最近需要在自己MacBookPro上用gem 裝東西, 記載一下.首先是 Connection Reseted 的...
    小陽哥_閱讀 5,762評論 2 3

友情鏈接更多精彩內容