从Windows Phone 8共享
我正在开发Windows Phone 8应用程序,并尝试通过DataTransferManager共享内容。 Windows API文档说Windows Phone支持它,但是当调用DataTransferManager.GetForCurrentView()
函数时,我得到一个例外
System.NotSupportedException was unhandled by user code HResult=-2146233067 Message=Specified method is not supported. Source=Windows InnerException:
我一直在寻找答案,找不到其他人有同样的问题,任何帮助将不胜感激。 关于此主题的所有示例似乎都是Windows 8特定的,但Phone 8确实包含这些function。 这是我的应用程序中的示例代码。
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView(); dataTransferManager.DataRequested += new TypedEventHandler(dataTransferManager_DataRequested); } private void dataTransferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs e) { DataPackage requestData = e.Request.Data; requestData.Properties.Title = "Share Text Example"; requestData.Properties.Description = "An example of how to share text."; requestData.SetText("Hello World!"); } private void Button_Tap_1(object sender, System.Windows.Input.GestureEventArgs e) { DataTransferManager.ShowShareUI(); }
同样,当页面加载到DataTransferManager.GetForCurrentView();
时,会显示exceptionDataTransferManager.GetForCurrentView();
function,所以它不会到达其他行,但无论如何包括它们。 我已经尝试添加/删除权限和程序集,但必须遗漏一些东西。 我也尝试将函数放在不同的事件(例如onTap函数)中,结果相同。
如果有人有兴趣自己尝试这个是一些文档:
DataTransferManager
DataRequested
DataPackage
GetForCurrentView()
UPDATE
虽然考虑到这个问题的上下文,它可能不是最佳解决方案,但我正在实现如下所述的Email / Sms / Link任务,而不是使用DataTransferManager。 似乎在WP8中可能无法访问DataTransferManager,虽然任务将采用许多不同的function,但它们似乎是执行预期function的最佳方式。
我想我已经找到了大部分用发射器寻找的东西……而不仅仅是使用Windows 8通用共享function,我可以特定于任务/启动器。
不幸的是,它没有魅力那么多的共享选项,我将实现电子邮件/短信/社交的几个function,但到目前为止这是最好的解决方案。
以下是我将要实现的function
private void ShareLink(object sender, System.Windows.Input.GestureEventArgs e) { ShareLinkTask shareLinkTask = new ShareLinkTask() { Title = "Code Samples", LinkUri = new Uri("http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff431744(v=vs.92).aspx", UriKind.Absolute), Message = "Here are some great code samples for Windows Phone." }; shareLinkTask.Show(); } private void ShareEmail(object sender, System.Windows.Input.GestureEventArgs e) { EmailComposeTask emailComposeTask = new EmailComposeTask() { Subject = "message subject", Body = "message body", To = "recipient@example.com", Cc = "cc@example.com", Bcc = "bcc@example.com" }; emailComposeTask.Show(); } private void ShareSMS(object sender, System.Windows.Input.GestureEventArgs e) { SmsComposeTask smsComposeTask = new SmsComposeTask() { Body = "Try this new application. It's great!" }; smsComposeTask.Show(); }
参考:
适用于Windows Phone的启动器
分享链接任务
根据我的API参考, DataTransferManager
仅为本机应用程序保留。 Windows Phone API快速入门 。
您是否尝试过使用完全合格的方法? 它会是这样的:
DataTransferManager dataTransferManager = indows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
此外,请确保您的目标是Windows Phone 8。
WP8不支持Windows 8共享合同。 在WP8上甚至没有Share魅力。 你为什么要使用DataTransferManager?
而不是使用共享合同,大多数用例可以与WP8 app2app自定义协议和文件扩展名一起使用 。 使用WP8应用程序,您可以跨应用程序传输文件和数据。 通过共享合同的标准化合同消失,应用程序可以使用自定义协议和文件扩展名创建自己的合同。
例如,您可以了解有关诺基亚音乐自定义协议的真实第三方实施的更多信息。