1

我将 Windows phone 8 应用程序升级到 8.1 silverlight。但是在使用地理围栏时,我想举杯祝酒。所以我写了这段代码

public sealed class Task : IBackgroundTask
    {
        static string TaskName = "GeofenceTask";
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // Get the information of the geofence(s) that have been hit
            var reports = GeofenceMonitor.Current.ReadReports();
            var report = reports.FirstOrDefault(r => (r.Geofence.Id == "sample") && (r.NewState == GeofenceState.Entered));

            if (report == null) return;

            // Create a toast notification to show a geofence has been hit
            var toastXmlContent = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

            var txtNodes = toastXmlContent.GetElementsByTagName("text");
            txtNodes[0].AppendChild(toastXmlContent.CreateTextNode("Geofence triggered toast!"));
            txtNodes[1].AppendChild(toastXmlContent.CreateTextNode(report.Geofence.Id));

            var toast = new ToastNotification(toastXmlContent);

            var toastNotifier = ToastNotificationManager.CreateToastNotifier();

            toastNotifier.Show(toast);
        }
}

但是在认证期间它说

此应用程序类型不支持此 API - Api=Windows.UI.Notifications.ToastNotification。模块=。文件=地理围栏任务.winmd。

之后我做了一些研究,发现这个答案

如果要使用 Windows.UI.Notifications,则必须选择 WNS,否则必须使用 ShellToast

所以我使用 MPN 是因为 Azure 移动服务不支持 WP8.1 silverlight 应用程序的 WNS。

通知中心 Windows Phone SDK 不支持将 WNS 与 Windows Phone 8.1 Silverlight 应用程序一起使用。

资源

所以我想在这种情况下我应该使用 ShellToast。但现在我走到了真正的死胡同。Windows 运行时组件项目不支持 ShellToast。我没有所需的正确参考。即,Microsoft.Phone.Shell。如果我添加

Using Microsoft.Phone.Shell; 

“电话”显示带有红色下划线。我应该怎么办?

更新:

我尝试从 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.0 添加 Microsoft.phone.dll

但是我在定义 ToastShell 的地方遇到了一个错误,它说:

GeofenceTask.winmd 中出现“System.InvalidProgramException”类型的异常,但未在用户代码中处理

附加信息:公共语言运行时检测到无效程序。

4

1 回答 1

1

所以您需要另一个程序集,其中包含您需要的命名空间中的类Microsoft.Phone.Shell?我用谷歌搜索并在 msdn ShellToast Class上找到了一个程序集:

程序集:Microsoft.Phone(在 Microsoft.Phone.dll 中)

版本信息: Windows Phone OS 支持:8.1、8.0、7.1

您必须将此 dll 添加到您的项目引用中。它带有 WP OS,因此您可以直接引用它,而无需将其与您的应用程序捆绑在一起,因此请设置Copy Local: False

[编辑] 也许你添加了错误的程序集?您在我的答案的评论中发布的路径对我来说似乎是错误的。在以下文件夹中查找它:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone\Microsoft.Phone.dll

于 2015-02-18T15:12:07.467 回答