我将 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”类型的异常,但未在用户代码中处理
附加信息:公共语言运行时检测到无效程序。