如何使用 xamarin.forms 在移动设备中选择多个音频和/或视频文件?

Posted

技术标签:

【中文标题】如何使用 xamarin.forms 在移动设备中选择多个音频和/或视频文件?【英文标题】:How to select multiple audio and/or video files in mobile device using xamarin.forms? 【发布时间】:2018-04-09 13:00:00 【问题描述】:

我正在 Xamarin 中编写音频播放器,我想创建一个播放列表并保存。要创建播放列表,我想选择音频/视频文件。我知道 Xamarin 中没有 FileUpload 类型的控件。

我指的是 Jason 的媒体插件https://github.com/jamesmontemagno/MediaPlugin,我想使用这个插件或任何其他插件来创建播放列表。我不知道如何配置/更改以加载音频/视频文件。

我已添加 nuget 包并尝试配置以下信息:

android 当前活动设置

这个插件使用Current Activity Plugin 来访问当前的Android Activity。如果 MainApplication.cs 文件未自动添加到您的应用程序,请务必完成完整设置。请通读Current Activity Plugin Documentation。您必须至少在 Activity 的 OnCreate 方法中设置以下内容:

csharp Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity = this;

=========================== 我知道我创建的项目不是 Xamarin.Android,它是用于移动应用程序的简单 .NET 2.0 Core 项目。

【问题讨论】:

你尝试了什么? 添加了更多信息。 【参考方案1】:

我指的是 Jason 的媒体插件https://github.com/jamesmontemagno/MediaPlugin,我想使用这个插件或任何其他插件来创建播放列表。

添加NuGet包后,需要添加WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE权限,并在OnCreate方法中添加Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity = this;。还需要覆盖OnRequestPermissionsResult() 方法。

代码如下:

using Plugin.Permissions;
using Plugin.Permissions.Abstractions; 

namespace selectmultipleaudio

    [Activity(Label = "selectmultipleaudio", MainLauncher = true)]
    public class MainActivity : Activity
    
        protected override void OnCreate(Bundle savedInstanceState)
        
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
            Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity = this;

            Button button = FindViewById<Button>(Resource.Id.button1);
            button.Click += Button_ClickAsync;
        

        private async void Button_ClickAsync(object sender, System.EventArgs e)
        
            var crossMedia = CrossMedia.Current;
            var media =  await crossMedia.PickVideoAsync();               
                    

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        
            PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        
    

您可以使用意图来选择多个视频文件。例如:

private void Button_Click(object sender, System.EventArgs e)
      
    var videoIntent = new Intent(
        Intent.ActionPick);
    videoIntent.SetType("video/*");
    videoIntent.PutExtra(Intent.ExtraAllowMultiple, true);
    videoIntent.SetAction(Intent.ActionGetContent);
    ((Activity)this).StartActivityForResult(
        Intent.CreateChooser(videoIntent, "Select videos"), 0);



protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
           
    if (data.ClipData != null)
    
        for (var i = 0; i < data.ClipData.ItemCount; i++)
        

            var video = data.ClipData.GetItemAt(i);
            Uri videouri = video.Uri;
            var path = videouri.Path;
        
    
    else
    
        Uri videouri = data.Data;
        var path = videouri.Path;
    

【讨论】:

以上是关于如何使用 xamarin.forms 在移动设备中选择多个音频和/或视频文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin Forms 中获取设备的 GPS 位置?

如何在 Xamarin.Forms.Map 中获取当前位置或移动到当前位置

Xamarin.Forms UWP 项目不会安装在 Windows 10 移动版上

在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题

在 Xamarin.Forms 中编写设备平台特定代码

Xamarin Forms - 如何使单击电子邮件链接的用户在设备中打开电子邮件应用程序