Открытие приложения из другого приложения с помощью Xamarin.Forms и MvvmCross UWP - PullRequest
1 голос
/ 16 июня 2020

Открыть приложение из другого приложения можно следующим образом:

public async Task<bool> LaunchUriAsync(string objectNumber)
{
  var option = new LauncherOptions();
  option.UI.PreferredPlacement = Placement.Right;
  option.DesiredRemainingView = ViewSizePreference.UseMore;
  return await Launcher.LaunchUriAsync(buildObjectAccessUri(objectNumber), option);
}


private static Uri buildObjectAccessUri(string objectId)
{
  return new Uri(String.Format("{0}://{1}/{2}", "myapp", "data", objectId), UriKind.Absolute);
}

в команде, которую я делаю:

await MyLauncherService.LaunchUriAsync("whatever");

, а в открытом приложении у меня есть собственный запуск

public class CustomAppStart : MvxAppStart
{
    protected override async Task NavigateToFirstViewModel(object hint = null)
    {
        // hint here is type of `Windows.ApplicationModel.Activation.ProtocolActivatedEventArgs`
    }
}

Кажется, что объект hint является типом Windows.ApplicationModel.Activation.ProtocolActivatedEventArgs

App.xaml.cs проекта UWP:

sealed partial class App
{
    public App()
    {
      InitializeComponent();
    }  
}

public abstract class UwpApp : MvxApplication<Setup<Core.App>, Core.App>
{
    private ILoggerService mLoggerService;
    public UwpApp()
    {
      UnhandledException += (sender, args) =>
      {
        mLoggerService = Mvx.IoCProvider.Resolve<ILoggerService>();
        if (mLoggerService == null)
        {
          return;
        }
        mLoggerService.Fatal("Unhandled exception!", args.Exception);
      };

      DebugSettings.BindingFailed += (sender, args) => Debug.WriteLine(args.Message);
      TaskScheduler.UnobservedTaskException += (sender, args) =>
      {
        mLoggerService = Mvx.IoCProvider.Resolve<ILoggerService>();
        if (mLoggerService == null)
        {
          return;
        }
        foreach (var ex in args.Exception.Flatten().InnerExceptions)
        {
          mLoggerService.Error(ex.Message + " StackTrace:" + ex.StackTrace);
        }
        args.SetObserved();
      };
      Suspending += OnSuspending;
      ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Auto;
    }
    protected override void OnSuspending(object sender, SuspendingEventArgs e)
    {
      var deferral = e.SuspendingOperation.GetDeferral();
      deferral.Complete();
    }
}

Почему я получил это?

Я ожидал, что это будет строка ...

Где ошибка?

Я использую последнюю версию xamarin и mvvm cross

1 Ответ

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

В вашем MvxApplication вы можете переопределить GetAppStartHint, чтобы обработать объект, поступающий в этот метод, и вернуть строку, как вы ожидаете.

Что-то вроде:

public abstract class UwpApp : MvxApplication<Setup<Core.App>, Core.App>
{
    protected override object GetAppStartHint(object hint = null)
    {
        // process hint
        //return string
    }
}
...