简体   繁体   中英

Open app from another app with Xamarin.Forms and MvvmCross UWP

Opening app from another app can be done like:

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

in a Command I do:

await MyLauncherService.LaunchUriAsync("whatever");

and in opened application I have a custom start

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

Seems that object hint is type of Windows.ApplicationModel.Activation.ProtocolActivatedEventArgs

The App.xaml.cs of UWP project:

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

Why I got that?

I expected to be string...

Where is the mistake?

I'm using latest version of xamarin and mvvm cross

In your MvxApplication you can override GetAppStartHint to process the object coming into that method and return a string as you expect.

Something like:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM