从一个包启动Activity到另一个包

时间:2012-06-28 15:55:44

标签: java android android-activity

我在不同的包中有不同的活动,

假设我有两个包 - > 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?

This is how my packages look

5 个答案:

答案 0 :(得分: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的部分

答案 1 :(得分:1)

请阅读错误。

“您是否在AndroidManifest.xml中声明了此活动”。 pakage不会出问题对于一个活动另一个活动。在AndroidManifest中检查AndroidManifest.xml中的活动是否为declear。

我认为问题就是出于这个原因。

感谢。

答案 2 :(得分:1)

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

示例:

    <activity 
        android:name="com.yourpackage.YourActivity"
        android:launchMode="singleTop"
        android:configChanges="orientation"
     >
    </activity>

答案 3 :(得分:1)

好的,所以有两个部分可以协同工作来定义Activity位置。首先,package属性 - 下面是“com.flipagain2”

还有android:name属性,例如.FlipAgain2Activity. 因此,这意味着当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=以匹配包括包的完全限定名称。使用这种方法,每个Activity都可以在不同的包中。

答案 4 :(得分:1)

通常,活动对其包裹是私密的。您不能在另一个包中启动活动,除非该活动明确地导出&#34; (即:其他应用程序已知)。将此添加到com.pack2中的FlipAgain2Activity的清单:

android:exported="true"