顯式Intent與隱式Intent的功能與使用方法解析。,intent使用方法

來源:互聯網
上載者:User

顯式Intent與隱式Intent的功能與使用方法解析。,intent使用方法
顯式Intent與隱式Intent的功能與使用方法解析。

 

Intent,在中文中的意思是意圖。就是想要做的事。

 

而使用startActivity(Intentintent)或者startActivityForResult(Intentintent)或者別的使用它的方法,形象地說就是指  去做你想要做的事。(do what you want to do)

 

首先,大體的介紹一下它們的使用差別:

1.Explicit Intent(顯式意圖):主要用於調用自身應用程式的組件(activity,service),或者其他程式的明確想調用的一直的組件。(這個比較少用,因為很少會這樣調用)

 

2.Implicit Intent(隱式意圖):主要用於啟動除本程式以外的程式。

 

然後講講各自的使用方法吧。

一:ExplicitIntent:

       使用前首先應該有一個Intent吧?我們先來建立一個。

       建立方法。Intent intent = newIntent(Context context,Class<?> class);

       後面的那個class參數呢,是一個類的反射。

       你也可以記作為目標Activity所在類的 類名.class;

 

       使用:

       startActivity(intent)或startActivityForResult(intent);

 

       然後就可以了。

      

二.ImplicitIntent

      

       我們以兩個角色的身份來進行解析。

 

       首先,調用者身份。(就是想跳到別的應用程式的當前應用程式)

       建立隱式Intent的主要的方法:

       初始帶Action:Intent(String action)

空的Intent:   Intent();

初始同時帶Action和Uri: Intent(String action, Uri uri);

其實這三種方法使用上差別不大,只是初始設定的參數多一點的構造方法有時候簡便一點而已。

Intent也可以在構建之後再設定或者改變參數值。

如:intent.setAction(String action) 還有Uri設定:setData(Uri uri),MIME類型:setType()等

 

需要注意的一點是,如果需要同時設定URI和MIME類型的時候,使用setDataAndType()方法,因為當你分別調用setData和setType時,他們會令到他們兩個中的另一個失效。為什麼呢?因為其實URI中也有設定Type的,會衝突,覆蓋另一個設定。

 

還有別的屬性,也是非常關鍵的。建議查閱Android開發文檔。因為我個人說的再好,也不如你自己動手去尋找,去探索。

 

調用隱式的Intent也和調用顯式的一樣。

 

隱式調用Intent的時候呢,如果你想啟動的具有某種功能的程式有多個,比如在你使用你個人想傳送檔案的時候,有很多個程式出來讓你選吧?比如藍芽,QQ什麼的。如果可以實現某個功能的程式有多個,就會出現一個列表來讓你進行選擇。只有單個程式的時候直接啟動這個程式。

那麼通常來說自己不知道啟動什麼程式,而系統自己就啟動了,這樣使用者的體驗效果是不是很不好?這時,就可以來實現一個儘管只有單個程式也出現選擇框的功能:Chooser.

Chooser本身也是一個Intent,只是它是一個附加有選取器的Intent。

 

使用樣本:

Intent intent =new Intent();

Intent chooser =intent.createChooser(intent,title);

 

這裡的title就是選擇框的標題字串。

 

 

2.接收隱式Intent

 

如果你想讓你的程式能接受來自與別的程式的隱式的Intent,那麼該如何做?

 

在資訊清單檔(Manifest)裡聲明你能接收某個類型的隱式Intent。

如:

<activityandroid:name="ShareActivity">

   <intent-filter>

       <action android:name="android.intent.action.SEND"/>

       <category android:name="android.intent.category.DEFAULT"/>

       <data android:mimeType="text/plain"/>

   </intent-filter>

</activity>

 

首先來解析一下Intent-filte的中文翻譯吧.Intent(意圖)的過濾器。

那麼為什麼要有這個過濾器啊

 

首先你來想一下,如果沒有過濾器這東西,那麼,當你想要啟動具有某個功能的程式的時候,系統就不能識別哪些程式能用哪些功能,就嗶哩啪啦的把所有的引用都列出來。這樣是不是很不好啊?

 

系統預設,如果一個應用中沒有任何的意圖過濾器(Intent-filter)那麼,任何的東西都不能通過它的審核。

 

可以把應用想象成一個飲水機,意圖過濾器就是用來過濾水的。那麼當一個飲水機(應用)沒有過濾器的時候,我是不是寧願讓它不能通過審核給人喝?沒過濾過的很容易有很多有害的物質。沒過濾過的你敢喝?。

當我們有過濾器了,心裡就放心點了,就能夠喝通過了過濾器過濾的水(相當於使用通過了審查的應用)。

 

那麼,接下來又有一個疑問了。

怎麼進行意圖的過濾?

 

答案當然是要一層一層的過濾啦。

 

 

       圖中的data為URI和MIME類型。

       只要有一條路徑能通過,那就是通過了,就能使用該程式的部分特定功能了。

 

       如果想更詳細的查看關於Intent的方面,請查看android官方文檔。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.