【问题标题】:ActivityNotFoundException when calling activity of another application调用另一个应用程序的活动时出现 ActivityNotFoundException
【发布时间】:2012-03-27 19:36:06
【问题描述】:

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

调用app相关源码:

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>

另一个应用的activity的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>

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

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

    • 你必须给他们单独的命名空间
      • 两个应用程序现在都有 com.MyPackage.* 前缀
    • 使用名称 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?

    【讨论】:

    • 在进行建议的更改后,我仍然收到 ActivityNotFoundException 或 ClassNotFoundException。也许这与无法在模拟器上正确安装应用程序有关。在我最近的努力中,首先我使用 adb 命令安装了被调用的应用程序(其中包含 Activity1 类)。然后我从 Eclipse 运行调用应用程序。这会生成关于 Activity1 的 ClassNotFoundException,这可能是由于某些奇怪的原因,被调用的应用程序不再在模拟器中引起的。为什么不再安装?如果这是我的问题的一部分,如何解决?谢谢!
    • 您正试图在另一个应用程序中调用 Activity?我指的是在同一个应用程序中开始第二个活动。查看我编辑的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多