2012-07-28 203 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