2

这是场景:我在同一个项目中有 2 个不同的包。 当我尝试从com.stable.app ActivityA包中通过 Intent ActivityB(在 com.stable.app.in 中)启动时,我收到此错误。我想我的清单没问题,但似乎是错误的。我的清单是:

<activity android:name=".in.Principal">
   <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

我的代码是:

final Intent intent = new Intent();                
intent.setClassName("com.stable.app.in", "com.stable.app.in.Principal");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);

我已经尝试了很多其他主题中的建议。它们是: 将包裹的整个路线交给 Manifest。尝试减少 MAIN、LAUNCHER 等。

如果您遇到过同样的问题,或者有可能的解决方案,请不要急于回复!

4

2 回答 2

1

你让这有点复杂。如果要在项目中启动另一个 Activity,可以使用以下代码段:

final Intent intent = new Intent(this, ActivityB.class);
startActivity(intent);

这更短更重要,您不会将活动名称用作字符串。这样,当您在 IDE 中重构活动类名称时,它也可以更改代码。使用字符串名称时,大多数 IDE 不会更改它。

此外,您必须确保在清单文件中声明活动正确。您不需要使用完整的类名,但如果您使用.in.Principal,请确保您的清单文件的包是com.stable.app.

于 2012-07-25T09:13:23.103 回答
0

根据您的要求,您声明的软件包数量取决于您的项目要求。您需要在清单文件中使用完整的包名称指定该活动名称。

假设在您的情况下,您的 Principal 是您在 com.stable.app.in 中的活动。那么在清单文件中你需要声明

<activity android:name="com.stable.app.in.Principal">
       <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
</activity>

如上。

于 2012-07-25T09:11:51.773 回答