调用另一个应用程序的活动时的ActivityNotFoundException

时间:2012-03-27 19:36:07

标签: android android-intent

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

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

Intent intent = new Intent();                
intent.setComponent(new ComponentName("com.MyPackage", om.MyPackage.Activity1));
startActivity(intent);

调用app的相关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 个答案:

答案 0 :(得分:4)

首先指出您尝试从Application1中的Activity启动Application2中的Activity

  • 您必须为它们分别提供名称空间
    • 这两个应用程序现在都有com.MyPackage.*前缀
  • OR 使用名称Activity1Activity2

所以你会有

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>

<强>第二

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name="com.MyPackage2.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>

见相关的SO问题:
How to start activity in another application?