Android 调用其他应用程序的活动时ActivityNotFoundException

Android 调用其他应用程序的活动时ActivityNotFoundException,android,android-intent,Android,Android Intent,当使用Eclipse的emulator从应用程序调用另一个应用程序的活动时,我不断得到“ActivityNotFoundException:无法找到显式活动类…”。问题可能与单击“设置”中的“管理应用程序”时无法同时下载/查找两个应用程序有关。这是我需要调用另一个应用程序的活动的第一个项目。但我也不确定代码是否正确。请帮助我确定我在下面介绍的代码片段中是否存在错误。有人暗示我可以设定行动领域的意图来实现目标,但还没有找到这方面的学习材料。我学习了如何在调用应用程序中使用setComponent方

当使用Eclipse的emulator从应用程序调用另一个应用程序的活动时,我不断得到“ActivityNotFoundException:无法找到显式活动类…”。问题可能与单击“设置”中的“管理应用程序”时无法同时下载/查找两个应用程序有关。这是我需要调用另一个应用程序的活动的第一个项目。但我也不确定代码是否正确。请帮助我确定我在下面介绍的代码片段中是否存在错误。有人暗示我可以设定行动领域的意图来实现目标,但还没有找到这方面的学习材料。我学习了如何在调用应用程序中使用setComponent方法,并将android:export添加到被调用活动的AndroidManifest.xml中。提前谢谢

调用应用程序的相关源代码:

Intent intent = new Intent();                
intent.setComponent(new ComponentName("com.MyPackage", om.MyPackage.Activity1));
startActivity(intent);
调用应用程序的相关AndroidManifest.xml:

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".MainActivity"
              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=".Activity1">
        <intent-filter>
            <action android:name="com.MyPackage.Activity1" />
            <category android:name="android.intent.category.DEFAULT" />               
        </intent-filter>
    </activity>

</application>

另一个应用程序的活动的AndroidManifest.xml的相关代码

<activity android:name=".Activity1" android:exported = "true">          
        <intent-filter>
            <action android:name="com.MyPackage.Activity1" />
            <category android:name="android.intent.category.DEFAULT" />             
        </intent-filter>
</activity>

首先指出您正试图从应用程序1中的活动开始应用程序2中的活动

  • 您必须为它们提供单独的名称空间
    • 这两个应用程序现在都有
      com.MyPackage.*
      前缀
  • 使用名称
    Activity1
    Activity2
所以你会有

com.MyPackage1.Activity1
// and
com.MyPackage2.Activity1
然后您可以使用此代码,从MyPackage1启动MyPackage2中的Activity1

// in file com.MyPackage1.Activity1
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.MyPackage2", "com.MyPackage2.Activity1"));
startActivity(intent);
您的
AndroidManifest.xml
文件应该如下所示:

首先

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

</application>

首先指出,您正试图从Application1中的活动开始Application2中的活动

  • 您必须为它们提供单独的名称空间
    • 这两个应用程序现在都有
      com.MyPackage.*
      前缀
  • 使用名称
    Activity1
    Activity2
所以你会有

com.MyPackage1.Activity1
// and
com.MyPackage2.Activity1
然后您可以使用此代码,从MyPackage1启动MyPackage2中的Activity1

// in file com.MyPackage1.Activity1
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.MyPackage2", "com.MyPackage2.Activity1"));
startActivity(intent);
您的
AndroidManifest.xml
文件应该如下所示:

首先

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

</application>

在进行了建议的更改后,我仍然会收到ActivityNotFoundException或ClassNotFoundException。也许这与无法在模拟器上正确安装应用程序有关。在我最近的工作中,首先我使用adb命令安装了被调用的应用程序(包含Activity1类)。然后我从Eclipse运行调用应用程序。这会生成与Activity1相关的ClassNotFoundException,这可能是由于某些奇怪的原因,被调用的应用程序不再在模拟器中引起的。为什么不再安装?如果这是我问题的一部分,如何解决?谢谢您正在尝试调用另一个应用程序中的活动?我指的是在同一个应用程序中启动第二个活动。查看我编辑的答案在进行建议的更改后,我仍在获取ActivityNotFoundException或ClassNotFoundException。也许这与无法在模拟器上正确安装应用程序有关。在我最近的工作中,首先我使用adb命令安装了被调用的应用程序(包含Activity1类)。然后我从Eclipse运行调用应用程序。这会生成与Activity1相关的ClassNotFoundException,这可能是由于某些奇怪的原因,被调用的应用程序不再在模拟器中引起的。为什么不再安装?如果这是我问题的一部分,如何解决?谢谢您正在尝试调用另一个应用程序中的活动?我指的是在同一个应用程序中启动第二个活动。见我编辑的答案