我在第一个包中有活动A,我想运行一个意图,该活动会启动第二个包中的活动B.
我该怎么做?欢迎任何样品。
这就是我所做的,以及我得到的错误:
包中的第一个活动(“MainActivity”):com.abelski.currencyclient 和第二个活动(不同包中的“SecondActivity”:com.idan.second
现在我想从MainActivity打电话给SecondActivity。
我已将此行添加到MainActivity的清单中:
<activity android:name="com.idan.second.SecondApplicationActivity"></activity>
现在在主Activity中我得到了这个按钮来运行这一行:
Intent intent = new Intent(MainActivity.this,SecondApplicationActivity.class);
这就是rror:
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):
答案 0 :(得分: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>
您可以使用以下命令创建一个Intent以从FirstActivity启动此SecondActivity:
Intent intent = new Intent("applicationB.intent.action.Launch");
startActivity(intent);
这一切意味着什么:
此文档位于:https://developer.android.com/reference/android/content/Intent.html
答案 1 :(得分: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>
您的java代码可以创建一个intent并以通常的方式启动活动:
Intent intent = new Intent(this,ActivityClassName.class);
startActivity(intent);
答案 2 :(得分:1)
如果你在这里提到的软件包与应用程序相同,我认为问题Android: Starting An Activity For A Different Third Party App中的答案更简单。对于该问题的第一个答案,你不需要对你的第二个应用程序进行任何修改
答案 3 :(得分:0)
使用显式意图:
Intent intent = new Intent(context,ClassName.class);
其中ClassName来自另一个包。
有时,在这种情况下,您将无法知道类的名称,您将不得不依赖目标类通告要处理的Intent。
答案 4 :(得分:0)
首先,您需要在Manifest上声明包和活动:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
,对于第二个活动,在android:name->上。打包name.activity,假设您的第二个包名称为com.iden.second:
<activity android:name=".second.SecondActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
<intent-filter>
<action android:name="android.intent.action.SECOND" />
<category android:name="android.intent.category.SECOND" />
</intent-filter>
</activity>
然后在MAINACTIVITY JAVA CLASS上,假设您将使用按钮开始第二个活动:
public class MainActivity extends AppCompatActivity {
private Button mButtonSecond;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButtonSecond = findViewById(R.id.btn_second);
mButtonSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent newActivity = new Intent(MainActivity.this,com.iden.second.SECOND.class);
startActivity(newActivity);
}
});
}
}
希望能有所帮助,因为我不清楚问题的结构