【问题标题】:Xamarin UWP : app in front/rear (method unexisting ?)Xamarin UWP:前/后应用程序(方法不存在?)
【发布时间】:2020-08-13 09:19:49
【问题描述】:

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

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

我有一个回应的开头

Window.Current.Activate();

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

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

但视觉工作室告诉我

AppResourceGroupInfo 没有 StartSuspendAsync() 的定义

但文档提到它AppResourceGroupInfo.StartSuspendAsync Method

有人有想法吗?

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

  • 这是一个 pcl 项目

  • 本意是利用依赖服务来实现平台功能的不同(已经实现只需要前/后)

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() 遇到一些问题

【问题讨论】:

  • 这段代码在哪里?是在 UWP 项目中还是共享?
  • 我用更多的结构细节更新我的帖子

标签: xamarin xamarin.forms uwp xamarin.uwp


【解决方案1】:

AppResourceGroupInfo 没有 StartSuspendAsync() 的定义

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

但这只有在我的应用没有最小化时才有效(应用不在第一视图中)

要制作应用程序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);
    }
}

【讨论】:

  • 对了一半:第一部分没问题,suspendasync 正常工作我会在找到第二部分后更新我的帖子。对于第二部分,我理解逻辑,但 'Package.Current.GetAppListEntriesAsync();'返回我的应用程序(使用 package.current 的逻辑)。解决方案可能是 packageManager(正在进行测试)
  • @GautierLogeot 第二部分我经常在桌面扩展应用程序中使用,并使用上面的代码将uwp调用到前台。能否详细介绍一下您的场景?
  • 抱歉我的翻译问题。您的代码几乎可以完美运行(只是我正在努力解决的访问问题)
  • 调用 LaunchAsync() 时出现此异常:“访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))”。添加能力?
猜你喜欢
  • 2017-02-05
  • 2023-03-20
  • 1970-01-01
  • 2020-06-14
  • 2018-09-12
  • 1970-01-01
  • 2020-01-26
  • 2018-12-08
  • 1970-01-01
相关资源
最近更新 更多