Активность запуска Xamarin из другого проекта в том же решении - PullRequest
0 голосов
/ 17 июня 2020

У меня есть решение xamarin с двумя проектами android. Я хочу запустить действие android в проекте1 из проекта2. Я видел темы, связанные с этим топом c (например, Как вызвать действие в другом проекте? Вызов активности из другого проекта ) и пробовал много предлагаемых решений, но в конце Я всегда получаю «Android .Content.ActivityNotFoundException:» Невозможно найти явный класс активности {companyname.project2 / companyname.project2.Droid.View.LoginView}; Вы объявили об этом действии в своем AndroidManifest. xml? '”ошибку. Возможно ли это в xamarin, если да, как? Я делаю что-то неправильно? Вот мой исходный код:

Project1:

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);
        }
    }
}

Project2:

[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);

        }
    }

Project 2 android фильтр намерений манифеста:

<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 Ответ

0 голосов
/ 17 июня 2020

Я не думаю, что манифесты объединяются по умолчанию. Поэтому, если вы посмотрите на получившийся AndroidManifest. xml в obj / Debug / android при сборке, вы, вероятно, заметите, что запись LoginView отсутствует.

Вы можете попробовать добавить следующий пакет NuGet в свой Проект приложения и посмотрите, объединит ли это манифесты: https://www.nuget.org/packages/Xamarin.Android.ManifestMerger/1.0.0-preview03

В противном случае вам нужно будет вручную добавить ту же запись в манифест приложений для LoginView.

EDIT:

Убедитесь, что вы используете правильное намерение. У меня это отлично работает:

var intent = new Intent(this, typeof(LoginView));
...