2012-07-28 78 views
0

我感覺很蠢。這很清楚,但我解決不了問題。請原諒我的問題。
我的問題是大約intenfilter.This是我的清單文件的應用程序標籤:android intent過濾器?

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:label="@string/app_name" 
      android:name=".AlakyTestActivity" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:label="reza" 
      android:name=".A2" > 
      <intent-filter > 
       <action android:name="MAIN" /> 

       <category android:name="LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application>  

這是我的按鈕,點擊收聽:

b1 = (Button)findViewById(R.id.button1); 
     b1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       Intent intent2 = new Intent(); 
       intent2.setAction("MAIN"); 
       intent2.addCategory("LAUNCHER"); 
       startActivity(intent2); 
      } 
     });  

我認爲所有的東西是好的,但是當我我的代碼運行並點擊b1,我得到這個erroe:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=MAIN cat=[LAUNCHER] }  

編輯
這是A2:

public class A2 extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     this.setContentView(R.layout.main2); 
    } 


} 

請幫助我。

+0

您沒有名爲'A2'的活動;正如在公共類A2擴展活動{'....我建議你多讀一點關於Android的發展,以獲得舒適的第一。 – t0mm13b 2012-07-28 14:23:28

+0

在這個名字'A2'的前面放置一段時間......'android:name =「。A2」'。儘管如此,雖然你可以在你自己的包中使用任何名稱來定義你的動作和類別,但是使用MAIN和Launcher有點令人困惑 - 使用更具代表性的'A2'活動呢。 – Squonk 2012-07-28 14:27:28

+0

@ t0mm13b好的,謝謝我將我的'A2'加入我的問題。 – 2012-07-28 14:28:11

回答

0

例如,您應該將第二個活動的android名稱設置爲(包名)。(該類) 例如,假設第二個活動類是'com.my.app.reza',您應該添加您清單:

<activity 
     android:label="@string/app_name" 
     android:name=".reza" > 
     <intent-filter > 
      <action android:name="com.my.app.REZA" /> 
      <category android:name="android.intent.category.DEFUALT" /> 
     </intent-filter> 
    </activity> 

,你應該開始這樣的活動:

Intent intent = new Intent("com.my.app.REZA"); 
startActivity(intent); 

要注意的是不要做的最好的辦法,你不應該惹到很多產品包名稱我'd建議您按照以下方式操作:

<activity 
     android:label="@string/app_name" 
     android:name=".reza" /> 

並啓動它這樣的:

startActivity(new Intent(this.getContext() , reza.class); 
+0

我必須在我的項目中使用intent-filter,而不是顯式的意圖。 – 2012-07-29 04:33:50

0

請使用這樣的:

Intent intent2 = new Intent(context,A2.class); 
startActivity(intent2); 

android:name=".A2",你必須有"A2"活動類實現!

修改爲android:name=".A2"而不是android:name="A2"

+0

我必須在我的項目中使用'intent-filter',而不是顯式的意圖。 – 2012-07-28 14:30:24

0
<intent-filter> 
<action android:name="com.blacky.basictutorial.TutorialTwo" /> 
<category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

嘗試在你的第二個活動使用,並通過調用下面的代碼:

startActivity(new Intent("com.blacky.basictutorial.TutorialTwo")); 

希望這會爲你工作。

+0

謝謝你,我嘗試了這些,但我又錯誤了。 – 2012-07-29 04:31:28

0

你並不需要指定類別,如果你只需要調用A2你的應用程序中。你應該設定一個獨特的動作的名稱,例如,它可以是一個散列字符串:

... 
Intent intent2 = new Intent("a202bfa923069ee8e119205e3468ee131ceafda37"); 
startActivity(intent2); 

注意動作名稱使用同樣的規則包的名稱。

+0

我相信我的行動是獨一無二的。 – 2012-07-29 04:32:55