簡體   English   中英

使用 Xamarin.Forms 和 MvvmCross UWP 從另一個應用程序打開應用程序

[英]Open app from another app with Xamarin.Forms and MvvmCross UWP

從另一個應用程序打開應用程序可以這樣做:

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`
    }
}

似乎 object hintWindows.ApplicationModel.Activation.ProtocolActivatedEventArgs的類型

App.xaml.cs項目的App.xaml.cs:

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

在您的MvxApplication ,您可以覆蓋GetAppStartHint以處理進入該方法的 object 並按預期返回一個字符串。

就像是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM