2017-03-17 1 views
3

하나의 버튼으로 아주 간단한 UWP 응용 프로그램을 만들었습니다. 을 클릭하면의 기본 공유 팝업이 표시되어 을 공유해야합니다.Windows Mobile에서 UWP 공유 기능이 작동하지 않습니다.

사실 내가 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를 어떻게 공유해야합니까?

+1

아마이 대답은 당신에게 유용합니다 : http://stackoverflow.com/a/30203936/1406798 –

+0

안녕, 내 응용 프로그램에서 나는 또한 공유를 사용했습니다. 그것은 데스크탑과 모빌에서 작동합니다. 차이점은 다음과 같습니다. 대신 새 IStorageItem [] {si} 새 List list = 새 List (); list.Add (파일); 여기서 File은 StorageFile입니다. 어셈블리도 확인하십시오. 모바일 익스텐션이 추가 되었습니까? – thezapper

답변

1

의견을 보내 주셔서 감사합니다. 모바일에서 계약서 공유와 함께 CreateStreamedFileAsync 메소드가 제대로 작동하지 않는 것 같습니다. 내부적으로이 문제를 기록했으며 진행 상황이 있으면 여기에서 업데이트 할 것입니다. 지금은

, 해결 방법으로, 당신은 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); 
+0

OnDataRequested가 호출되는시기와 방법을 알지 못합니다. 나는 그것이 ShowShareUI()를 사용할 때만 호출되지만, 1/2 초 동안 몇 개의 대화 상자가 열리고 immediatelly 후에 닫힙니다. 대화 상자의 메시지에 '이 앱은 현재 공유 할 수 없습니다.'라는 메시지가 표시됩니다. 대화 상자가 닫히고 내 OnDataRequested가 호출되지만 아무 일도 일어나지 않습니다. 정확히 여기에서 설명했습니다. https://stackoverflow.com/questions/46555117/uwp-datatransfermanager-showshareui-opens-sharing-dialog-with-this-app-cant – pixel

0

당신은 내가

을 유사한 문제를 생각했던 한 당신이

이 코드를 검사를 havent
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

관련 문제