【问题标题】:UWP share feature not working in Windows 10 MobileUWP 共享功能在 Windows 10 移动版中不起作用
【发布时间】:2017-08-08 23:31:27
【问题描述】:

我用一个按钮创建了一个非常简单的 UWP 应用程序。单击它应该会显示内置的共享弹出窗口以共享PDF文件

事实上,我让它适用于 Windows 10(桌面),但它不适用于移动设备(弹出窗口没有出现在屏幕上)。

PDF 文件以字节数组的形式出现(因为它将来自远程服务)。

这是 MainPage.xaml.cs

中的代码
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        DataTransferManager.GetForCurrentView().DataRequested += OnDataRequested;
    }

    protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        // This should come from a service
        PdfBytes = await Microsoft.Toolkit.Uwp.StorageFileHelper.ReadBytesFromPackagedFileAsync("Document.pdf");
    }

    public byte[] PdfBytes { get; set; }

    private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
    {
        var deferral = args.Request.GetDeferral();

        var si = await StorageFile.CreateStreamedFileAsync("Document.pdf", stream =>
        {
            var writeStream = stream.AsStreamForWrite();
            writeStream.Write(PdfBytes, 0, PdfBytes.Length);
            stream.Dispose();                
        },  null);

        args.Request.Data.Properties.Title = "PDF Document";
        args.Request.Data.Properties.Description = "Some description";
        args.Request.Data.SetStorageItems(new IStorageItem[] { si });
        deferral.Complete();
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        DataTransferManager.ShowShareUI();
    }
}

正确吗?如果不是,我应该如何共享 PDF(从它的字节)?

【问题讨论】:

  • 也许这个答案对你有用:stackoverflow.com/a/30203936/1406798
  • 嗨,在我的应用程序中,我也使用了共享。它适用于桌面和移动。不同之处在于:而不是 new IStorageItem[] { si } 我使用 new List list = new List();列表。添加(文件);其中 File 是一个 StorageFile。还要检查您的程序集。你有添加移动扩展吗?!

标签: c# .net uwp win-universal-app


【解决方案1】:

感谢您的反馈。 CreateStreamedFileAsync 方法似乎不适用于 Mobile 中的 Share 合同。我们已经在内部记录了这个问题,一旦有任何进展,我会在这里更新。

目前,作为一种解决方法,您可以先将文件存储在TemporaryFolder,然后按如下方式共享:

private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
    var deferral = args.Request.GetDeferral();

    var tempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("Document.pdf", CreationCollisionOption.ReplaceExisting);
    await FileIO.WriteBytesAsync(tempFile, PdfBytes);

    args.Request.Data.Properties.Title = "PDF Document";
    args.Request.Data.Properties.Description = "Some description";
    args.Request.Data.SetStorageItems(new IStorageItem[] { tempFile });

    deferral.Complete();
}

临时应用数据存储是存放您不希望在当前应用会话后保留的数据的正确位置。系统可以根据需要删除存储在此位置的数据以释放空间。您可以将它用于任何中间或临时文件。如果您正在向 Temp 写入大量数据,最好在您的应用程序初始化时将其清除,以避免系统或用户不得不采取行动来释放存储空间。你可以通过调用来做到这一点:

await ApplicationData.ClearAsync(ApplicationDataLocality.Temporary);

【讨论】:

  • 我不知道何时以及如何调用 OnDataRequested。我只有在使用 ShowShareUI() 时才会调用它,但这会打开一些对话框 1/2 秒,然后立即关闭它。对话框中的消息显示“此应用目前无法共享。”。对话框关闭,然后调用我的 OnDataRequested 但没有任何反应。我在这里解释了stackoverflow.com/questions/46555117/…
【解决方案2】:

我相信你有类似的问题

你有没有尝试过改变

private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
    var deferral = args.Request.GetDeferral();

    var si = await StorageFile.CreateStreamedFileAsync("Document.pdf", stream =>
    {
        var writeStream = stream.AsStreamForWrite();
        writeStream.Write(PdfBytes, 0, PdfBytes.Length);
        stream.Dispose();    

        args.Request.Data.Properties.Title = "PDF Document";
        args.Request.Data.Properties.Description = "Some description";
        args.Request.Data.SetStorageItems(new IStorageItem[] { si });
        deferral.Complete();

    },  null);
}

我没有检查过这段代码,所以它可能无法编译,但我发现如果涉及线程,我的问题看起来与你的相似。看看我的问题UWP DataTransferManager ShowShareUI() Opens Sharing Dialog with "This app can't share right now" and Closes it Immediately After

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我的分享在桌面应用程序中运行良好,但在移动应用程序中却不行。经过一番努力,我发现延迟在 Windows 10 移动版中不起作用。

    所以最好删除这些行并尝试。它的工作原理

    var deferral = args.Request.GetDeferral();
    deferral.Complete();
    

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 2017-09-04
      • 2018-10-27
      • 2016-06-09
      相关资源
      最近更新 更多