在我问我的问题之前,我看到android intent filter?
并Android: Activity not registered in the manifest
搜索了this
,但我找不到我的答案。
在我的应用程序中,我必须以 . 开始Activty1
表单IntentFilterActivity
(两者都是活动)。这implicit Intent
是我的代码:
显现
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.namespace" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="2" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".IntentFilterActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="Activity1" android:name="com.your.namespace.Activity1" > <intent-filter > <action android:name="com.your.namespace.MY_MAIN"/> <category android:name="com.your.namespace.MY_LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
IntentFilterActivity
package com.your.namespace; public class IntentFilterActivity extends Activity { protected String action = "com.your.namespace.MY_MAIN"; protected String category = "com.your.namespace.MY_LAUNCHER"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(IntentFilterActivity.this,Activity1.class); IntentFilterActivity.this.startActivity(i); } }); Button b2 = (Button) findViewById(R.id.button2); b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(); i.setAction(action); i.addCategory(category); IntentFilterActivity.this.startActivity(i); } }); } }
活动1
package com.your.namespace; public class Activity1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main1); } }
首先,我有一个按钮(比如说b2
),R.layout.main
在它的 onClick 事件中,我尝试使用隐式 Intent 启动 Activity1。但是当我单击它时,我收到了这个错误:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.your.namespace.MY_MAIN cat=[com.your.namespace.MY_LAUNCHER] }
因此,我在 onClick 事件中添加了另一个 Buuton(例如b1
)R.layout.main
,我尝试使用显式 Intent 启动 Activity1,并且 Activity1 启动良好。所以我的问题在于在清单中注册 Activity1。
我试图更改包名称,清理/构建项目,创建一个新项目并从那里开始,在另一台计算机上的 eclipse 中导入项目,重新启动 eclipse 和......但我得到错误。我的项目只有一个包(com.your.namespace
) .
我做错了什么?请帮我解决这个问题。
编辑:
当我将 Activty1 的 Intent 过滤器更改为:
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
并运行应用程序,应用程序的图标出现两次Launcher
!这很奇怪,一个意图过滤器似乎被忽略了,另一个过滤器没有。