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?
Czy możesz umieścić kod xamarin.android, który chcesz przetłumaczyć w xamarin.ios? –
@ DanieleDavì Proszę spojrzeć na zmiany – Arti