我有xamarin.android项目Client1和1 CommonApp项目(在同一解决方案内),这些项目具有所有通用代码。从Client1项目中,我需要启动CommonApp,我的代码要在Client1应用中启动
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
FindViewById<Button>(Resource.Id.btn1).Click += delegate {
//Starting CommonApp project
StartActivity(new Intent(Application.Context, typeof(CommonApp.MainActivity)));
};
}
}
下面的1是CommonApp MainActivity,其中调试器指向前进,但未启动新活动,但是当我按下物理后退按钮时,该活动又被添加到了堆栈中。
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//This is CommonApp
SetContentView(Resource.Layout.activity_main);
}
CommonApp activity_main有
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="This is CommonApp">
</TextView>
说明:我有2个android应用的解决方案。 1个CommonApp和第二个客户端1。 Cleint1是具有CommonApp类型的.dll的启动项目。从Cleint1应用程序中,我通过导入CommonApp名称空间来启动CommonApp。我可以有许多项目Client1,Client2,Client3 ... etc,它们带有自己的图标,应用程序名称,启动屏幕和google-service.json。当我在启动时设置Client2时,它将成为Client2项目和CommonApp中所有可用的通用代码。
要求:Here
应用日志
更新的屏幕截图:
答案 0 :(得分:2)
我认为CommonApp Activity实际上已启动(如调试器所示),但是它没有使用正确的布局文件。两个MainActivity
(来自CommonApp的一个和来自Client1的一个)都使用名为activity_main
的布局。因此,两个项目都包含一个activity_main.xml
文件,并且似乎一个(来自Client1项目)覆盖了另一个文件。
没有用于资源的名称空间,您需要重命名布局(以及您要保持唯一性的任何其他资源)以避免冲突。您可以添加前缀,例如common_activity_main
和client_activity_main
已编辑(评论中的其他信息):
包含公共部分的项目应该是 Android类库,而不是 Android App 。否则,它似乎可以正常工作(没有构建错误),但是APK中没有布局文件。
答案 1 :(得分:0)
如果您知道另一个应用程序的软件包名称,则可以通过调用intent来实现目标。
String appName = "appName";
String packageName = "package.of.another.application";
openApp(context, appName, packageName);
public static void openApp(Context context, String appName, String packageName) {
if (isAppInstalled(context, packageName))
if (isAppEnabled(context, packageName))
context.startActivity(context.getPackageManager().getLaunchIntentForPackage(packageName));
else Toast.makeText(context, appName + " app is not enabled.", Toast.LENGTH_SHORT).show();
else Toast.makeText(context, appName + " app is not installed.", Toast.LENGTH_SHORT).show();
}
private static boolean isAppInstalled(Context context, String packageName) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException ignored) {
}
return false;
}
private static boolean isAppEnabled(Context context, String packageName) {
boolean appStatus = false;
try {
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packageName, 0);
if (ai != null) {
appStatus = ai.enabled;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return appStatus;
}
答案 2 :(得分:0)
确保未安装您的通用应用程序。如果已经安装,您可以尝试
Intent intent = PackageManager.GetLaunchIntentForPackage("Com.CommonAPP.CommonAPP");
if (intent != null)
{
StartActivity(intent);
}
希望这会对您有所帮助。