2017-02-09 35 views
1

我試圖創建一個功能,讓我分享能夠通過androids共享對話,共享圖像到任何支持申請例如。鬆弛,Outlook等Xamarin Android - 共享圖像從應用程序結果沒有圖像顯示,並在Android的Outlook IO錯誤

但是,當我運行下面的代碼完成沒有錯誤的圖像不會出現在我分享給任何應用程序和Outlook來回android給出一個通用的IO錯誤。

async void shareMetricFromURL(){ 
       WebClient webClient = new WebClient(); 
       var url = new Uri ("https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Stack_Overflow_logo.svg/500px-Stack_Overflow_logo.svg.png"); 
       byte[] bytes = null; 


       try{ 
        bytes = await webClient.DownloadDataTaskAsync(url); 
       } 
       catch(TaskCanceledException){ 
        return; 
       } 
       catch(Exception e){ 
        return; 
       } 

       string documentsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString(); 
       string localFilename = "downloaded.png"; 
       string localPath = System.IO.Path.Combine (documentsPath, localFilename); 

       //Sive the Image using writeAsync 
       FileStream fs = new FileStream (localPath, FileMode.OpenOrCreate); 
       await fs.WriteAsync (bytes, 0, bytes.Length); 

       fs.Close(); 

       var sendIntent = new Intent(); 
       sendIntent.SetAction(Intent.ActionSend); 

       var uri = Android.Net.Uri.FromFile(new Java.IO.File(localPath)); 
       sendIntent.PutExtra(Intent.ExtraStream, uri); 

       sendIntent.SetType("image/*"); 
       StartActivityForResult(Intent.CreateChooser(sendIntent, "Share With..."), 0); 
    } 

有什麼想法?

回答

0

嘗試添加

sendIntent.AddFlags (ActivityFlags.GrantReadUriPermission); 

所以文件可以讀取

見這個例子

public void Send() 
{ 


    Bitmap b = BitmapFactory.DecodeResource(Resources,Resource.Drawable.icon_120); 

    var tempFilename = "test.png"; 
    var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; 
    var filePath = System.IO.Path.Combine(sdCardPath, tempFilename); 
    using (var os = new FileStream(filePath, FileMode.Create)) 
    { 
     b.Compress(Bitmap.CompressFormat.Png, 100, os); 
    } 
    b.Dispose(); 

    var imageUri = Android.Net.Uri.Parse ($"file://{sdCardPath}/{tempFilename}"); 
    var sharingIntent = new Intent(); 
    sharingIntent.SetAction (Intent.ActionSend); 
    sharingIntent.SetType ("image/*"); 

    sharingIntent.PutExtra (Intent.ExtraStream, imageUri); 
    sharingIntent.AddFlags (ActivityFlags.GrantReadUriPermission); 
    StartActivity (Intent.CreateChooser (sharingIntent, "choose"));} 
相關問題