0

我在不同的套餐中有不同的活动,

假设我有两个包 ->com.pack1 ->com.pack2

我在 pack1 中有一个 Activity,并想在 pack2 中调用另一个 Activity。我将如何做到这一点,使用意图显示

21:19:10.405: W/System.err(7578): android.content.ActivityNotFoundException: Unable to find explicit activity class have you declared this activity in your AndroidManifest.xml?

这就是我的包裹的样子

4

5 回答 5

2
    Intent i = new Intent("android.intent.action.MAIN");
    i.setComponent(new ComponentName("com.mypkg.mystff","com.mypkg.mystuff.MyClass"));

其他答案也是正确的。但是,这将在设备中的任何位置工作。

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

将此添加到您的 xml 的一部分

于 2012-06-28T16:00:25.027 回答
1

请阅读错误。

“您是否在 AndroidManifest.xml 中声明了此活动”。包装没有问题对于去一个活动另一个活动。检查您的 AndroidManifest.xml 活动在 AndroidManifest 中是否已清除。

我认为问题是因为这个原因而发生的。

谢谢。

于 2012-06-28T15:58:24.460 回答
1

您需要确保在AndroidManifest.xml中声明该活动,否则您将无法使用它。

例子:

    <activity 
        android:name="com.yourpackage.YourActivity"
        android:launchMode="singleTop"
        android:configChanges="orientation"
     >
    </activity>
于 2012-06-28T15:58:34.570 回答
1

好的,所以有两个部分协同工作来定义Activity位置。首先是package属性——在它下面是`"com.flipagain2"

还有一个android:name属性,例如,是.FlipAgain2Activity. So,这意味着当 Android 查找您的活动时,它正在查看

com.flipagain2.FlipAgain2Activity. 说得通?把这两件事结合起来。

因此,您需要两个包中的活动。

将第二个(不工作的)更改为如下所示:

<activity android:name="com.package2.CaptureActivity" >
    <intent-filter>
        <action android:name="com.google.zxing.client.android.CaptureActivity" />
         <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

你看到我改变了什么吗?保留第一个Activity声明相同,但更改第二个android:name=以匹配包含包的完全限定名称。使用这种方法,每个活动都可以在不同的包中。

于 2012-06-28T16:46:34.637 回答
1

通常,活动对其包是私有的。除非该活动被明确“导出”(即:让其他应用程序知道),否则您不能在另一个包中启动活动。将此添加到 com.pack2 中 FlipAgain2Activity 的清单中:

android:exported="true"
于 2012-06-28T16:47:17.230 回答