从不同的包装发起活动

ray*_*man 15 android

我在第一个包中有活动A,我想运行一个意图,它将启动一个活动B,它在第二个包中.

我怎样才能做到这一点?欢迎任何样品.

这就是我所做的,我得到的错误:

包中的第一个活动("MainActivity"):com.abelski.currencyclient和第二个活动(不同包中的"SecondActivity":com.idan.second

现在我想从MainActivity打电话给SecondActivity.

香港专业教育学院在MainActivity的清单中添加了这一行:

 <activity android:name="com.idan.second.SecondApplicationActivity"></activity>
Run Code Online (Sandbox Code Playgroud)

现在在主Activity中我得到了这个按钮来运行这一行:

Intent intent = new Intent(MainActivity.this,SecondApplicationActivity.class); 
Run Code Online (Sandbox Code Playgroud)

这就是恐怖:

04-29 09:20:59.197: ERROR/AndroidRuntime(399): Uncaught handler: thread main exiting due to uncaught exception
04-29 09:20:59.276: ERROR/AndroidRuntime(399): java.lang.NoClassDefFoundError: com.idan.second.SecondApplicationActivity
04-29 09:20:59.276: ERROR/AndroidRuntime(399):     
Run Code Online (Sandbox Code Playgroud)

小智 22

我假设通过"包"你的意思是申请.

我们有: - 带有FirstActivity的ApplicationA - 带有SecondActivity的ApplicationB

如果在ApplicationB的AndroidManifest.xml文件中,在SecondActivity的声明中添加了一个intent过滤器,例如:

<activity android:name=".SecondActivity">
  <intent-filter>
    <action android:name="applicationB.intent.action.Launch" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

您可以创建一个Intent以从FirstActivity启动此SecondActivity:

Intent intent = new Intent("applicationB.intent.action.Launch");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

这一切意味着什么:

  • SecondActivity有一个过滤器,用于"applicationB.intent.action.Launch"的intent动作
  • 当您使用该操作创建一个intent并调用'startActivity'时,系统将找到响应它的活动(如果有)

该文档位于:https: //developer.android.com/reference/android/content/Intent.html


小智 9

我有同样的问题,解决方案是包名根目录中的另一个级别.

如果你有两个软件包"com.first ...."和"com.second ...",那么清单就是引用"com.first".然后,您可以重构两个包,以便重用第一部分.例如,"com.package.first"和"com.package.second".然后你的清单也必须更新

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.package">
...

    <activity android:name=".first.FirstPackageActivity" android:label="FirstPackageActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity android:name=".second.SecondPackageActivity" android:label="SecondPackageActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

您的Java代码可以创建一个intent并以通常的方式启动活动:

Intent intent = new Intent(this,ActivityClassName.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)