【问题标题】:android intent filter?android意图过滤器?
【发布时间】:2012-07-29 12:40:02
【问题描述】:

我感觉很愚蠢。这很清楚,但我无法解决我的问题。所以请原谅我的问题。
我的问题是关于 intenfilter。这是我的清单文件的应用程序标记:

<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时,我得到了这个错误:

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);
    }


}

请帮帮我。

【问题讨论】:

  • 您没有名为A2的活动;就像public class A2 extends Activity{.... 我建议你先阅读更多关于 Android 开发的知识。
  • A2这个名字前面加上句号,像这样...android:name=".A2"。尽管如此,尽管您可以在自己的包中使用任何名称 intnet-filter 输入您的操作和类别,但使用 MAINLauncher 有点令人困惑 - 使用更能代表 A2 活动所做的事情.
  • @t0mm13b 好的,谢谢,我将A2 添加到我的问题中。
  • @Squonk 谢谢,我在'A2'前面加了.,但它不起作用。你还有其他想法吗?
  • @StudentStudent : A2 活动是否与AlakyTestActivity 在同一个包中?

标签: android intentfilter


【解决方案1】:

您应该将第二个活动的 android:name 设置为(包名)。(类) 例如,假设第二个活动类是“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);

请注意,这不是最好的方法,您不应该过多地混淆包名我建议您按照以下方式进行操作:

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

然后这样开始:

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

【讨论】:

  • 我必须在我的项目中使用意图过滤器,而不是显式意图。
【解决方案2】:

请这样使用:

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

android:name=".A2",你必须有"A2"活动类实现!

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

【讨论】:

  • 我必须在我的项目中使用intent-filter,而不是明确的意图。
【解决方案3】:

如果您只需要在应用内调用A2,则无需指定类别。并且你应该设置一个唯一的动作名称,例如它可以是一个哈希字符串:

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

请注意,动作名称与包名称使用相同的规则。

【讨论】:

    【解决方案4】:
    <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"));
    

    希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2015-05-14
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多