-1

這可能是一個非常愚蠢的問題,但我不太清楚答案。爲什麼我們需要android中的intent過濾器?

  1. 我的隱式意圖包含一個動作,數據&類別(可選),我在發送或者通過startActivity或startService意圖通過。

這樣的事情,我們通常做的,

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); 
intent.putExtra(android.content.Intent.EXTRA_TEXT, "Standing on the Moon!"); 
startActivity(intent); 

,然後我們用不同的方式完成的,清單文件使用一個意圖過濾器相同的操作類似

<activity android: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> 

我的問題 - 既宣稱這是爲了相同的目的,他們宣佈的兩種不同方式的方式,他們是否有不同的意義?

+0

第一個是調用,第二個是宣告。這就像說你不需要方法簽名,因爲你調用了你的方法,所以他們必須存在。 – njzk2

+0

在啓動您自己的應用程序的組件時請不要使用隱式Intents - 使用明確引用您的ShareActivity.class的Intent。不使用隱式意圖的原因是您無法保證您的應用程序組件將被使用,並且您可能會看到意外的行爲。 – Squonk

回答

4

我記得,從清單文件引用應用程序作爲意圖過濾器會讓其他應用程序知道您有能力處理該意圖。因此,如果您有能力發送郵件並在清單中以這種方式註冊自己,另一個應用程序可以使用您的郵件發送電子郵件。

這是經常看到的畫廊應用程序。應用程序很少創建自己的應用程序,除非它們本身是一個應用程序庫因此,他們會詢問Android系統可用的圖庫/郵件應用程序,並讓您從列表中選擇一個。當您將自己註冊爲可處理此意圖的應用程序時,您可以在此列表中找到您的應用程序。

我確實認爲這是兩者之間的一個主要區別,因爲程序化實例並不爲其他應用程序所知。

+0

謝謝......我正在尋找答案。 – akash89