iOs相当于Android的共享功能

时间:2016-06-02 11:32:20

标签: c# xamarin.ios

我正在开发一个xamarin.forms应用程序(android,iOS,windows)。我的应用程序具有共享功能,允许用户将音频文件共享到其他应用程序并从其他应用程序接收音频文件。我已经在android中使用意图文件管理器和东西,但不知道我需要为iOS做什么。我读到了有关扩展的信息。我需要使用它还是其他任何方式?任何帮助将不胜感激。

修改 如何在iOS xamarin中进行共享扩展?

修改

在Android中分享逻辑:

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"));

在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();
            }
        }
    }

    ...
}

我还设法从iOS共享音频文件但没有运气从其他应用程序接收文件。

分享音频文件的iOS代码:

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);

以上代码不允许通过邮件分享音频,也不会在邮件中添加主题和正文。对此有何帮助?以及如何从其他应用程序接收文件?

1 个答案:

答案 0 :(得分:1)

要在您的应用和任意其他应用之间共享数据,您需要使用UIActivityViewController。阅读the documentationthis article from NSHipster了解详情。