2012-07-15 33 views
1

我有一個非常簡單的應用程序(一個教科書的例子),它由2個活動組成:第一個活動UsingIntentActivity有一個按鈕。點擊此按鈕後,必須導致第二項活動SecondActivity,這將在屏幕上顯示文字。如何使用自定義意圖開始活動?

我可以使用startActivity(new Intent(this, SecondActivity.class));

然而在我遇到了這個例子中,使用相同的方法的另一種形式的教科書實現這一點:

startActivity(new Intent("net.dreamingpixel.SecondActivity")); 

而在匹配的定製意圖創建Manifest File(我的理解):

<activity 
     android:name=".UsingIntentActivity" 
     android:label="@string/title_activity_using_intent" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".SecondActivity" 
     android:label="Second Activity" > 
     <intent-filter> 
      <action android:name="net.dreamingpixel.SecondActivity" /> 

      <categoty android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

因此,有意向過濾器和類別設置爲DEFAULT。但是當我嘗試像這樣運行應用程序並單擊UsingIntentActivity的應用程序崩潰按鈕。在日誌中的貓,我可以看到以下消息:

FATAL EXCEPTION: main 
java.lang.IllegalStateException: Could not execute the method of the activity 

然後它指向startActivity的方法,我在這篇文章的開頭寫的召喚。

有沒有人有類似的問題?我在某個地方犯了錯嗎?

更新:另外我注意到在Manifest文件中有一條警告,我打開第二個活動標籤。它說:導出活動並不需要許可

也許這個警告必須做與我的問題東西..

+1

你命名你的包「net.dreamingpixel」? – 2012-07-15 09:35:10

+0

包名稱爲「net.dreamingpixel.usingintent」。那是錯的嗎? – 2012-07-15 09:40:00

+0

是的,你應該把它命名爲「net.dreamingpixel」或者將你的調用改爲'startActivity(new Intent(「net.dreamingpixel.usingintent.SecondActivity」));' – 2012-07-15 10:57:01

回答

1

當您發送您所創建的清單文件次活動按照

startActivity(new Intent("net.dreamingpixel.SecondActivity")); 

這裏net.dreamingpixel.SecondActivity意味着,在這裏您需要提供活動名稱以及您在項目中創建的包...

在頂部的清單中,您會找到包名稱。您需要使用該套件名稱與您的活動......

這裏按照上面的代碼..

net.dreamingpixel ----- is a package 
     SecondActivity ----- is an Activity in that package. 
+0

不,這只是一個意圖過濾器,只要你在清單的意圖過濾器中寫入相同的字符串,你也可以在其中寫入任何字符串 – 2012-07-15 09:42:51

+0

我將意圖的名稱更新爲'net.dreamingpixel。使用in @作爲@ ofir-a。建議,但這並沒有解決我的問題。 Android文檔中提到:「用給定動作創建一個intent,其他所有字段(數據,類型,類)都是空的。請注意,該動作必須位於命名空間中,因爲Intents在系統中是全局使用的 - 例如系統VIEW操作是android.intent.action.VIEW;應用程序的自定義操作類似於com.google.app.myapp.CUSTOM_ACTION。「 – 2012-07-15 10:05:54

+0

否則做一件事..當你在startActivity中寫入intent(新意圖(「....」))時,將其改爲Intent it = new Intent(「net.dreamingpixel。SecondActivity「); startActivity(it);這將是愚蠢的,因爲它們都是相同的,但它有時會工作 – 2012-07-15 10:13:39