2012-04-22 7 views

回答

48

例如:

隱活動通話

在意圖過濾器創建行動,你的活動,所以其他應用程序可以通過這個動作叫你的活動如下:

<activity android:name=".BrowserActivitiy" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="http"/> 
    </intent-filter> 
</activity> 

另一種稱爲隱式意圖的方式如下:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); 
startActivity(intent); 

顯式調用活動

您撥打一個電話,指示到底哪個活動類:

Intent intent = new Intent(this, ActivityABC.class); 
i.putExtra("Value", "This value for ActivityABC"); 
startActivity(intent); 

希望這有助於你瞭解Android的更多顯式和隱活動通話。

你可以得到關於Android意向here

2

看到這裏意向分辨率

http://developer.android.com/guide/topics/intents/intents-filters.html

明確意圖(活動)是指一個特定的類,並且在一般情況下,只提供給你的包。隱含意圖是指應用程序公開宣佈他們可以處理某些類型的數據或可以提供特定服務的意圖過濾器。發送電子郵件。對於隱含的意圖,用戶選擇使用哪個活動(通常是一個包)來處理意圖,或者如果設置了默認處理程序,則啓動它。

22
  1. 顯式意圖有更詳細的用於調用特定的組件。當您知道要啓動哪個組件時,並且不想讓用戶自由控制要使用哪個組件。例如,您有一個具有2個活動的應用程序。活動A和活動B.您想從活動A啓動活動B.在這種情況下,您可以定義明確的目標活動B,然後使用它直接調用它。
  2. 當你知道你想要做什麼時,使用隱式意圖,但是你不知道應該啓動哪個組件。或者如果您想讓用戶在要使用的組件列表中進行選擇的選項。如果這些Intents被髮送到Android系統,它將搜索爲特定操作和數據類型註冊的所有組件。如果只找到一個組件,Android會直接啓動組件。例如,您有一個使用相機拍攝照片的應用程序。您的應用程序的一個特點是,您可以讓用戶發送他拍攝的照片。您不知道用戶具有哪種可以發送照片的應用程序,並且您還想讓用戶選擇使用哪個外部應用程序(如果他有多個應用程序)。在這種情況下,你不會使用明確的意圖。相反,您應該使用隱式意圖,將其操作設置爲ACTION_SEND,並將其數據額外設置爲照片的URI。

明確的意圖總是傳遞給它的目標,不管它包含了什麼;沒有諮詢過濾器。但是一個隱含的意圖傳遞到一個組件,只有當它能夠通過組件的一個過濾器

+4

真棒解釋... – 2015-05-12 16:38:57

0

有兩種類型的意圖的:

  • 明確意圖:

    在創建一個意圖對象我們明確指定並直接在目標組件名稱上傳遞,這是一個明確的意圖。

  • 隱性意圖:

    在這種情況下,我們委託評估註冊組件(註冊通常是使用我們稍後會介紹的意圖過濾器完成)的任務是基於Android的意圖數據和(如發送電子郵件,捕獲照片,在地圖上鎖定位置等)。所以Android會自動啓動相同的應用程序或其他可以處理意圖消息/作業的應用程序的組件。這種情況下的想法是,假設我們必須在地圖上固定一個位置,因爲我們不必編寫自己的活動來處理該位置。相反,只需將位置數據傳遞給像谷歌地圖這樣的應用程序,即可代表我們的應用程序完成這項工作。

源:http://codetheory.in/android-intents/

0

何時使用哪個?

明確意圖:當您知道哪個組件可以處理您的請求。所以你在意圖中明確提到組件名稱

Intent i = new Intent(context,DetailActivity.class); // DetailActivity.class is the component name 
startActivity(i); 

隱含的意圖:當你不知道哪個應用程序可以處理您的請求,那麼你提到的意圖行動,讓OS決定哪些應用/ s是/是適合你的任務。

例如:播放音樂

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_VIEW); 
intent.setData(file); 
startActivity(intent); 

OS如何確定?

當有意圖的隱式調用時,OS會取出該動作,然後使用PackageManager將其與所有應用程序的所有已註冊活動的所有意向過濾器進行匹配,然後將結果填充爲列表。它被稱爲intent resolution
因此,您的設備中可能沒有應用程序可用於處理您的請求。在這種情況下,您將得到NullPointer異常。

所以更安全的方式來調用隱含的意圖會是這樣

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(file); 
if (intent.resolveActivity(getPackageManager()) != null) { 
    startActivity(intent); 
} 
相關問題