Xamarin UWP:front/rear 中的应用程序(方法不存在?)

Xamarin UWP : app in front/rear (method unexisting ?)

我在 xamarin 中有一个应用程序可以侦听文件夹并在创建文件时执行一些操作。 但问题是我需要能够:

  1. 创建文件时将我的应用放在前面
  2. 当 acyion 完成后,将我的应用程序推到后面

我开始回复

Window.Current.Activate();

但这只有在我的应用程序未最小化时才有效(应用程序不在第一视图中) 我已经试过了:

IList<AppDiagnosticInfo> infos = await AppDiagnosticInfo.RequestInfoForAppAsync();
IList<AppResourceGroupInfo> resourceInfos = infos[0].GetResourceGroups();
await resourceInfos[0].StartSuspendAsync();

但是visual studio告诉我

AppResourceGroupInfo don't have a definition for StartSuspendAsync()

但文档中提到了它 AppResourceGroupInfo.StartSuspendAsync Method

有人有想法吗?

更新 [2020-04-29 16:48] :

pcl 中的界面

public interface IWindowManager
    {
        void Minimize();
        void Maximize();
    }

在 uwp

class WindowManager : IWindowManager
    {
        public async void Maximize()
        {
            try
            {
                Window.Current.Activate();
            }
            catch(Exception ex)
            {
                DependencyService.Get<IErrorLogger>().LogError(ex);
            }
        }

        public async void Minimize()
        {
            IList<AppDiagnosticInfo> infos = await AppDiagnosticInfo.RequestInfoForAppAsync();
            IList<AppResourceGroupInfo> resourceInfos = infos[0].GetResourceGroups();
            resourceInfos[0].StartSuspendAsync();
        }
    }

正如我所说的 StartSuspendAsync() 遇到了一些问题

AppResourceGroupInfo don't have a definition for StartSuspendAsync()

源自官方文档,StartSuspendAsync() 在 Windows 10 更新 1803(内部版本 17134)中可用。所以请将UWP项目的mini版本编辑为17134。

but that only work if my app is not minimize (app not in first view)

要制作应用 foreground,您可以使用以下代码。

IEnumerable<AppListEntry> appListEntries = await Package.Current.GetAppListEntriesAsync();
        await appListEntries.First().LaunchAsync();

更新

如果上述方法不起作用,请尝试为 UWP 应用程序注册 protocol 并使用 Windows.System.Launcher.LaunchUriAsync 方法启动它。

public async void Maximize()
{
    try
    {
        await Windows.System.Launcher.LaunchUriAsync(new Uri("testapp:"));
    }
    catch (Exception ex)
    {
        Debug.Write(ex);
    }
}