9

我正在开发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 确实包含这些功能。这是我的应用程序中的示例代码。

    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。似乎 DataTransferManager 在 WP8 中可能无法访问,尽管这些任务将采用许多不同的功能,但它们似乎是执行预期功能的最佳方式。

4

4 回答 4

10

我想我已经找到了我在 Launchers 中寻找的大部分内容……而不仅仅是使用 Windows 8 的一般共享功能,我还可以使用 Tasks/Launchers。

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

这是我将要实现的功能

    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 启动器

分享链接任务

于 2012-11-29T14:37:28.283 回答
2

根据我的 API 参考,DataTransferManager仅保留给本机应用程序。Windows Phone API 快速入门

于 2012-11-28T01:15:49.300 回答
0

您是否尝试过使用完全限定的方法?它会是这样的:

DataTransferManager dataTransferManager = indows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();

此外,请确保您的目标是 Windows Phone 8。

于 2012-11-27T21:16:39.980 回答
0

WP8 不支持 Windows 8 共享合同。WP8 上什至没有分享魅力。为什么要尝试使用 DataTransferManager?

大多数用例无需使用共享合同,而是可以与 WP8 app2app 自定义协议和文件扩展名一起正常工作。使用 WP8 应用程序,您可以跨应用程序传输文件和数据。尽管共享合约的标准化合约已经消失,但应用程序可以使用自定义协议和文件扩展名创建自己的合约。

例如,您可以在此处了解有关诺基亚音乐自定义协议的真实第 3 方实施的更多信息。

于 2012-11-29T01:57:30.467 回答