Sharing from 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: 

我一直在寻找答案,但找不到其他有同样问题的人,如果有任何帮助,我将不胜感激。关于这个主题的所有示例似乎都是特定于Windows8的,但Phone8确实包含了这些功能。这是我的应用程序中的示例代码。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(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();函数上时,会显示异常,因此它不会访问其他行,但无论如何都会包含这些行。我已尝试添加/删除权限和程序集,但一定缺少某些内容。我还尝试将该函数放入不同的事件中(如onTap函数),结果相同。

如果有人有兴趣自己尝试,这里有一些文档:

DataTransferManager

请求的数据

数据包

获取当前视图()

更新

尽管考虑到这个问题的背景,这可能不是最好的解决方案,但我正在实现下面描述的电子邮件/Sms/Link任务,而不是使用DataTransferManager。看起来DataTransferManager在WP8中可能无法访问,尽管任务将具有许多不同的功能,但它们似乎是执行预期功能的最佳方式。

我想我已经找到了Launchers的大部分功能。。。不只是使用Windows 8的通用共享功能,我可以具体使用任务/启动器。

不幸的是,它没有魅力那么多的共享选项,我将为电子邮件/短信/社交实现几个功能,但到目前为止,这是最好的解决方案。

以下是我将要实现的功能

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上甚至没有分享魅力。您为什么要尝试使用DataTransferManager?

大多数用例都可以很好地使用WP8 app2app自定义协议和文件扩展名,而不是使用共享契约。使用WP8应用程序,您可以跨应用程序传输文件和数据。尽管共享合同的标准化合同已经消失,但应用程序可以使用自定义协议和文件扩展名创建自己的合同。

例如,您可以在这里了解有关诺基亚音乐自定义协议的第三方实现的更多信息。

最新更新