2010-07-23 97 views
44

在我的Android應用程序,我想開始一個活動從最初的活動「A」「B」。我爲這兩個創建了類。使用下面的代碼入門C然而,當我得到一個運行時錯誤:application has stopped unexpectedly, try again。這裏是我的代碼:什麼是Android的意圖過濾器?

Intent myIntent = new Intent(this, AddNewActivity.class); 
startActivity(myIntent); 

當我加入AndroidManifest.xml/manifest/application/activity/intent-filers的活動B中的新條目,然後應用程序的工作。

我有兩個問題:

  • 當有AndroidManifest.xml多個活動項目,如何安卓知道哪些活動首先啓動?
  • 我不明白意圖過濾器。任何人都可以請解釋。

這裏是我的部分AndroidManifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".ListAllActivity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".AddNewActivity" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

回答

26

When there are multiple activities entries in AndroidManifest.xml, how does android know which activity to start first?

沒有 「第一」。就你的情況而言,如圖所示,你的啓動器中會有兩個圖標。無論用戶點擊的是啓動的那個。

I could not understand intent-filters. Can anyone please explain.

有相當多的documentation on the subject。請考慮閱讀,然後提出更具體的問題。此外,當您收到「應用程序意外停止,請重試」時,請使用adb logcat,DDMS或Eclipse中的DDMS透視圖來檢查與該錯誤相關的Java堆棧跟蹤。

+0

哦謝謝。我不知道abt'adb logcat'。 – ankitjaininfo 2010-07-23 20:40:29

+0

adb logcat聽起來像年份。謝謝@CommonsWare的支持 – Killer 2016-05-11 07:15:14

1

保留第一個意向過濾器,使用密鑰MAINLAUNCHER,並添加另一個爲ANY_NAMEDEFAULT

LAUNCHER將活動A和DEFAULT將您的活動B.

1

不可能有任何兩個Lancher AFAIK。 Logcat是一個有用的工具,用於調試和檢查後面的應用程序/機器狀態。它會自動從一個活動切換到另一個活動。

2

首先更改XML,選擇第二個活動爲DEFAULT

<activity android:name=".AddNewActivity" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

現在你可以使用StartActivity方法開展這項活動。

46

意圖過濾器是在應用程序的清單文件,指定該組件希望接收的意圖的類型的表達式。

當你創建一個隱含的意圖,Android系統找到合適的組件由意向的內容進行比較,以在設備上的其他應用程序的清單文件中聲明的意圖過濾器來啓動。如果意圖與意圖過濾器相匹配,則系統啓動該組件並將其傳遞給Intent對象。

AndroidManifest。XML

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

啓動的HelloWorld

Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse("http://androidium.org")); 
startActivity(intent); 
+2

簡單。清楚說明意圖過濾器是什麼。這回答了這個主題的標題中的問題。 – Sparky1 2015-03-10 18:09:32

1

,你必須吃午飯時,應用程序打開提到它作爲LAUNCHER在意向類別和剩餘活動提意向類別默認的Activity

例如: - 有2活性A和B
活性的是LAUNCHER所以使其爲LAUNCHER在意向類和B是孩子發生的活性,從而使其爲默認。

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".ListAllActivity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".AddNewActivity" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
</application> 
+0

我們還需要給這兩個活動不同的名字@Mahadevappa T – cammando 2017-01-15 12:43:54

2

當你創建一個隱含的意圖,Android系統找到合適的組件由意向的內容進行比較,以在設備上的其他應用程序的清單文件中聲明的意圖過濾器來啓動。如果意圖與意圖過濾器相匹配,則系統啓動該組件並將其傳遞給Intent對象。如果多個意圖過濾器兼容,系統會顯示一個對話框,以便用戶可以選擇要使用的應用程序。

intent過濾器是應用程序清單文件中的一個表達式,它指定組件想要接收的意圖類型。例如,通過爲活動聲明一個意圖過濾器,您可以讓其他應用程序以某種意圖直接開始活動。同樣,如果您沒有爲活動聲明任何意圖過濾器,則只能以明確的意圖啓動它。

據:Intents and Intent Filters

0

如果可能的話,試試這個即時解決:

Intent intent =new Intent(getApplicationBaseContext,second_Act.class); 
StartActivity(intent); 
1

意圖過濾器是出現在清單中您的應用程序指定的意圖,該組件是接受的類型表達式。 如果組件沒有任何意圖過濾器,它可以收到明確的意圖。 如果帶有過濾器的組件然後接收隱式和顯式意圖