Xamarin 在同一解决方案中运行来自其他项目的活动
Posted
技术标签:
【中文标题】Xamarin 在同一解决方案中运行来自其他项目的活动【英文标题】:Xamarin run activity from other project in same solution 【发布时间】:2020-10-07 05:57:27 【问题描述】:我有一个包含两个 android 项目的 xamarin 解决方案。我想在 project2 中的 project1 中运行 android 活动。我看过与这个主题相关的线程(比如How to call an activity in another project? Call activity from another project) 并尝试了许多建议的解决方案,但最后我总是得到“Android.Content.ActivityNotFoundException: 'Unable to find explicit activity class companyname.project2/companyname.project2.Droid.View.LoginView;您是否在 AndroidManifest.xml 中声明了此活动?'”错误。如果可以,这在 xamarin 中是否可行?难道我做错了什么?这是我的源代码:
项目1:
namespace BigAppManager
[Activity (MainLauncher = true, Name = "com.companyname.bigappmanager.MainActivity", Label = " Logowanie", ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, NoHistory = true, LaunchMode = LaunchMode.SingleInstance)]
public class MainActivity : MvxActivity<MainActivityViewModel>
protected override void OnCreate (Bundle savedInstanceState)
base.OnCreate (savedInstanceState);
Xamarin.Essentials.Platform.Init (this, savedInstanceState);
SetContentView (Resource.Layout.activity_main);
Button button = FindViewById<Button> (Resource.Id.button);
button.Click += ClickButton;
private void ClickButton (object sender, EventArgs e)
//Intent intent = new Intent("companyname.project2.Droid.View.LoginView");
//StartActivity(intent);
Intent intent = new Intent (Intent.ActionMain);
intent.AddCategory (Intent.CategoryLauncher);
// intent.SetClassName("companyname.project2", "companyname.project2.Droid.View.LoginView");
intent.SetComponent (new ComponentName ("companyname.project2", "companyname.project2.Droid.View.LoginView"));
StartActivity (intent);
public override void OnRequestPermissionsResult (int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
Xamarin.Essentials.Platform.OnRequestPermissionsResult (requestCode, permissions, grantResults);
base.OnRequestPermissionsResult (requestCode, permissions, grantResults);
项目2:
[Activity(Name = "companyname.project2.Droid.View.LoginView", Label = " Logowanie", ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, NoHistory = true, LaunchMode = LaunchMode.SingleInstance)]
public class LoginView : MvxActivity<LoginViewModel>
protected override void OnCreate(Bundle savedInstanceState)
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.LoginView);
项目 2 android manifest intent 过滤器:
<activity android:name="companyname.project2.Droid.View.LoginView">
<intent-filter>
<action android:name="companyname.project2.View.LoginView"></action>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
【问题讨论】:
【参考方案1】:我认为默认情况下不会合并清单。因此,如果您在构建时查看 obj/Debug/android 中生成的 AndroidManifest.xml,您可能会注意到缺少 LoginView 条目。
您可以尝试将以下 NuGet 包添加到您的 App 项目中,看看是否会合并清单:https://www.nuget.org/packages/Xamarin.Android.ManifestMerger/1.0.0-preview03
否则,您将需要在您的应用清单中为 LoginView 手动添加相同的条目。
编辑:
确保您使用正确的意图。这对我来说很好:
var intent = new Intent(this, typeof(LoginView));
【讨论】:
谢谢你,但不幸的是它似乎不起作用。仍然得到同样的错误。我已经尝试将提到的 nuget 包添加到第一个、第二个和两个项目中。尝试将手动相同的意图过滤器添加到第一个项目。在位于 obj/Debug/android 的 AndroidManifest.xml 中,手动添加的活动都是可见的。 经过几次尝试,我成功了。似乎必须安装其他应用程序才能从其他项目开始活动。我需要在没有安装的情况下从其他项目开始活动,所以我将第二个项目作为库。感谢您的帮助,我会将其标记为已接受的答案。以上是关于Xamarin 在同一解决方案中运行来自其他项目的活动的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 不在同一页面中显示来自第二个 CollectionView 的内容