无法从不同的包启动活动[Android]

时间:2011-12-16 13:20:50

标签: android

我在两个包中有两个不同的活动如下:

  1. com.my.application.MyActivity1
  2. com.my.application.Test.MyActivity2
  3. 在我的清单文件中,我有  package="com.my.application"
    并且这些活动都在相同的application标签中。

    我正在使用:

    从.Test.MyActivity2中启动MyActivity1
    Intent intent = new Intent(getApplicationContext(), MyActivity1.class);
    startActivity(intent);
    

    我在启动应用程序时在log cat中获取以下日志:

    I/ActivityManager( 1305): Starting: Intent { cmp=com.my.application/.MyActivity1 } from pid 2336
    D/dalvikvm( 1886): GC_EXTERNAL_ALLOC freed 133K, 51% free 2687K/5447K, external 1527K/1559K, paused 56ms
    D/dalvikvm( 1886): GC_EXTERNAL_ALLOC freed 12K, 51% free 2675K/5447K, external 9796K/11844K, paused 40ms
    D/AndroidRuntime( 1886): Shutting down VM
    W/dalvikvm( 1886): threadid=1: thread exiting with uncaught exception (group=0x2018d560)
    I/ActivityManager( 1305): Process com.my.application (pid 2336) has died.
    

    在调用startActivity函数后,我的应用程序段/崩溃,我无法看到MyActivity2已启动/启动。

    因此无法从android中的不同包中启动活动。

    谢谢,
    PP。

5 个答案:

答案 0 :(得分:1)

它可能:)你的发布是正确的,所以它必须设置有问题。确切地说,你应该从activity1开始activity2,为什么你很清楚清单就是我说的答案。您会看到清单中引用的包是您的主要活动应该驻留的位置。

答案 1 :(得分:1)

检查您的清单

应该如下所示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.my.application" android:versionCode="1"
    android:versionName="1.0">

    <application  android:label="@string/app_name"
         android:icon="@drawable/logo_android">
        <activity android:name=".MyActivity1" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".Test.MyActivity2" android:label="@string/app_name">
        </activity>
    </application>
</manifest> 

我这会帮助你。

答案 2 :(得分:1)

Intent intent = new Intent(this,com.packagename.activityname);

也在清单中,

<activity android:name=".packagename.Activityname" />

而不是<activity android:name=".Activityname" />

答案 3 :(得分:0)

使用一个包到另一个包很简单。使用此代码执行此操作

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setComponent(new ComponentName("another package name","another package's main activity"));
    startActivity(intent);
}

这对我来说很好。

答案 4 :(得分:-1)

您可以尝试这样: 把它放在清单中:

<activity android:name=".SecondActivity">
  <intent-filter>
    <action android:name="applicationB.intent.action.Launch" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

然后这样打电话:

Intent intent = new Intent("applicationB.intent.action.Launch");
startActivity(intent);