簡體   English   中英

Android隱式和顯式意圖

[英]Android Implicit and Explicit Intents

使用隱式意圖與顯式意圖?

對於這個隱含意圖:

Intent searchintent = new Intent()
searchintent.setAction(Intent.ACTION_VIEW)searchintent.setData(Uri.parse(“http://www.google.com”))startActivity(searchintent)

我如何設置另一個動作以及如何將setData與Uri參數以外的其他東西一起使用?

我只是試圖理解兩種類型的意圖。

謝謝

隱式意圖是您想要執行操作但不知道用戶當前有哪些應用程序來處理該操作。 例如,發送電子郵件,有許多應用程序,因此用戶可以選擇他想要使用的應用程序。

顯式意圖用於在應用程序中啟動活動(如果您具有main活動)和secondActivity,並且您希望啟動您調用顯式意圖的第二個活動。

StartActivity(new Intent(getBaseContext(), secondActivity.class));

您可以通過向使用Intent傳遞的bundle添加額外內容來在活動之間傳遞數據。

Intent i = new Intent(getBaseContext, secondActivity.class);
i.putExtra("key",value);
startActivity(i);

要在第二個活動中取回附加功能,請致電:

getIntent().getStringExtra("key");

或者,如果您只想獲得通過的“數據”uri,您可以致電

getIntent().getData();

額外的可以是例如int / double / String或parcable對象

http://developer.android.com/reference/android/os/Parcelable.html

如果您需要完成的操作可以由各種應用程序或不屬於您的應用程序完成,則可以使用隱式intent。 例如,條形碼掃描,聯系人揀選,短信/電子郵件等....

當您想要控制處理意圖的活動時(即,為什么將類定義傳遞給intent),應該使用顯式意圖用法。

意圖只是調用其他活動。 每個活動以下列方式處理此調用(作為您的調用):

1)在OnCreate()方法中,活動正在尋找有效的操作(如在您的調用“ACTION_VIEW”中)。 如果此操作的操作有效且可以調用,則會調用此活動中的函數並“回答”您的請求。 (使用“startActivityForResult”調用時)。

2)將數據設置為Intent:如果被調用的動作需要一些參數,則需要這樣做。 這個參數可以是很多類型,因此它可以是String或Integer作為示例。 您可以將這些類型的數據捆綁在“Bundle”中,並將其放入Intent中。 具有指定操作和數據的被調用活動處理所有這些以及可能的事情,否則會拋出錯誤或者什么。

在您的代碼示例中,您調用打開瀏覽器的活動(因為android系統知道如何使用URL參數處理“ACTION_VIEW”,以及由底層安卓系統定義的系統默認行為。

如果您編寫自己的活動,則可以將公共變量定義為“操作”,並且可以在OnCreate方法中處理,即使使用了所需的參數。

  1. 顯式意圖用於調用特定組件。 當您知道要啟動哪個組件並且不希望讓用戶可以自由控制要使用的組件時。例如,您有一個具有2個活動的應用程序。 活動A和活動B.您想要從活動A啟動活動B.在這種情況下,您定義一個顯式的意圖目標activityB,然后使用它直接調用它。
  2. 當您知道自己想要做什么時會使用隱式意圖,但是您不知道應該啟動哪個組件。 或者,如果您希望為用戶提供在要使用的組件列表之間進行選擇的選項。 如果將這些Intent發送到Android系統,它將搜索為特定操作和數據類型注冊的所有組件。 如果只找到一個組件,Android將直接啟動該組件。 例如,您有一個使用相機拍照的應用程序。 您的應用程序的一個功能是,您可以讓用戶發送他拍攝的照片。 您不知道用戶可以發送照片的應用程序類型,並且您還希望為用戶提供選項,以便在有多個外部應用程序時選擇使用該應用程序。 在這種情況下,您不會使用明確的意圖。 相反,您應該使用隱式意圖,其操作設置為ACTION_SEND,其數據額外設置為照片的URI。

無論它包含什么,明確的意圖總是傳遞給它的目標; 不咨詢過濾器。 但只有當組件可以通過組件的一個過濾器時,才會將隱式意圖傳遞給組件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM