2016-06-02 14 views
7

Zajmuję się tworzeniem aplikacji xamarin.forms (Android, iOS, Windows). Moja aplikacja ma funkcję udostępniania, która pozwala użytkownikowi udostępniać pliki audio innym aplikacjom i odbierać pliki audio z innych aplikacji. Zrobiłem to w Androidzie, używając intentowych filtrów i innych rzeczy, ale nie jestem pewien, co muszę zrobić dla systemu iOS. Czytałem o rozszerzeniach udziałów. Czy muszę użyć tego lub w jakikolwiek inny sposób? Każda pomoc będzie doceniona.Odpowiednik iOs dla funkcji udostępniania Android

Edytuj Jak uzyskać rozszerzenie udziału w iOS Xamarin?

EDIT

Podziel logika w Androidzie:

Intent sharingIntent = new Intent(Android.Content.Intent.ActionSend); 
sharingIntent.SetType("audio/*"); 
sharingIntent.PutExtra(Android.Content.Intent.ExtraSubject, "Share"); 
if (!String.IsNullOrEmpty(url)) 
{ 
    sharingIntent.PutExtra(Android.Content.Intent.ExtraText, Html.FromHtml(new StringBuilder() 
     .Append("<p><b>URL</b> : ") 
     .Append("<a href='" + url + "'>" + url + "</a></p>") 
     .ToString())); 
} 
sharingIntent.PutExtra(Intent.ExtraStream, Android.Net.Uri.FromFile(new Java.IO.File(path))); 
Forms.Context.StartActivity(Intent.CreateChooser(sharingIntent, "Share via")); 

Odbieranie pliku udostępnionego w MainActivity.cs:

[IntentFilter(new[] { Intent.ActionSend }, Categories = new[] { Intent.CategoryDefault }, DataMimeType = "audio/*")] 
[IntentFilter(new[] { Intent.ActionSendMultiple }, Categories = new[] { Intent.CategoryDefault }, DataMimeType = "audio/*")] 
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity 
{ 
    async protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     Intent intent=Intent; 
     String action = Intent.Action; 
     String type = Intent.Type; 
     if (Intent.ActionSend.Equals(action) && type != null) 
     { 
      if (type.StartsWith("audio/")) 
      { 
       Bundle bundleExtra = Intent.Extras; 
       if (bundleExtra != null) 
       { 
        Android.Net.Uri sharedFileURI = (Android.Net.Uri)bundleExtra.Get(Intent.ExtraStream); 
        await Upload(sharedFileURI); //upload logic here 
       } 
      } 
      else 
      { 
       new AlertDialog.Builder(this) 
       .SetPositiveButton("Ok", (sender, args) => 
       { 
        // User pressed yes 
       }) 
       .SetMessage("Not an audio file!") 
       .SetTitle("Alert") 
       .Show(); 
      } 
     } 
     else if (Intent.ActionSendMultiple.Equals(action) && type != null) 
     { 
      if (type.StartsWith("audio/")) 
      { 
       Bundle bundleExtra = Intent.Extras; 
       if (bundleExtra != null) 
       { 
        System.Collections.IList imageUris = intent.GetParcelableArrayListExtra(Intent.ExtraStream); 

        if (imageUris.Count <= 1) 
        { 
         foreach (var p in imageUris) 
         { 
          Android.Net.Uri sharedFileURI = (Android.Net.Uri)p; 
          await Upload(sharedFileURI); //upload logic here 
         } 
        } 
        else 
        { 
         new AlertDialog.Builder(this) 
          .SetPositiveButton("Ok", (sender, args) => 
          { 
           // User pressed yes 
          }) 
          .SetMessage("Not an audio file!") 
          .SetTitle("Alert") 
          .Show(); 
        } 
       } 
      } 
      else 
      { 
       new AlertDialog.Builder(this) 
       .SetPositiveButton("Ok", (sender, args) => 
       { 
        // User pressed yes 
       }) 
       .SetMessage("You have choosen more than one file!") 
       .SetTitle("Alert") 
       .Show(); 
      } 
     } 
    } 

    ... 
} 

I udało się również udostępnić plik audio z iOS, ale nie szczęście otrzymywania pliku z innych aplikacji.

kod iOS podzielić plik audio:

var subviews = window.Subviews; 
var view = subviews.Last(); 
var frame = view.Frame; 
frame = new RectangleF(0, 0, 0, 0); 
var uidic = UIDocumentInteractionController.FromUrl(new NSUrl(path, false)); 
var rc = uidic.PresentOpenInMenu(frame, view, true); 

Ten powyższy kod nie pozwala dzielić dźwięku za pośrednictwem poczty i nie dodać przedmiot i ciało do wiadomości. Jakaś pomoc w tej sprawie? A jak odebrać plik z innych aplikacji?

+0

Czy możesz umieścić kod xamarin.android, który chcesz przetłumaczyć w xamarin.ios? –

+0

@ DanieleDavì Proszę spojrzeć na zmiany – Arti

Odpowiedz

1

Aby udostępniać dane między aplikacją a dowolnymi innymi aplikacjami, musisz użyć numeru UIActivityViewController. Zapoznaj się z the documentation i this article from NSHipster, aby uzyskać wyjaśnienie.

+0

Próbowałem go z UIActivityViewController. Ale nie dołącza pliku audio. – Arti

+1

Kod próbowałem: 'NSString stringText = (NSString)" test danych "; NSUrl URL = new NSUrl (path); var activityItems = new NSObject [] {stringText, URL}; Aplikacja UIActivity [] applicationActivities = null; Aktywność UIActivityViewControllerViewController = new UIActivityViewController (activityItems, applicationActivities); UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController (activityViewController, true, null); ' – Arti

+0

@Arti Spróbuj podać tylko adres URL, a nie ciąg i adres URL. – yaakov

Powiązane problemy