Xamarin - IOS - 照片库中的视频资源 - 按名称查找

时间:2017-12-23 21:27:50

标签: ios xamarin.ios photos

我是Xamarin开发的新手。

我构建了我的应用,用户可以点击下载按钮。 此按钮从服务器下载视频并保存到照片库

这是我如何实现这个(也许是不正确的方法??)

public bool SaveVideo(byte[] videoData, int id)
    {
        try
        {

                CreateCustomAlbum();


            //  Save file to applicaiton folder
            string local_path = SaveFileToApplicationFolder(videoData);

            _lib.WriteVideoToSavedPhotosAlbum(new Foundation.NSUrl(local_path), (t, u) =>
            {
                DeleteLocalFile(local_path); // HERE I DELETE FILE FOR NOT INCREASE SIZE OF APPLICATION


                _local_file_path = t.AbsoluteUrl.ToString(); // global variable 

                _lib.Enumerate(ALAssetsGroupType.Album, HandleALAssetsLibraryGroupsEnumerationResultsDelegate, (obj) => { });
            });
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }


    void DeleteLocalFile(string local_path)
    {

        try
        {
            if (File.Exists(local_path))
            {
                File.Delete(local_path);
                if (!File.Exists(local_path))
                {
                    Console.WriteLine("Deleted");
                }
            }
        }
        catch (Exception ex)
        {

        }
    }

string SaveFileToApplicationFolder(byte[] videoData)
    {
        try
        {
            string file_path = String.Empty;



            var doc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string filename = "MY-APP-" + id + ".mp4"; // id global variable
            file_path = Path.Combine(doc, filename); // global variable

            File.WriteAllBytes(file_path, videoData);

            return file_path;
        }
        catch (Exception ex)
        {
            return String.Empty;
        }
    }

void HandleALAssetsLibraryGroupsEnumerationResultsDelegate(ALAssetsGroup group, ref bool stop)
    {
        try
        {
            if (group == null)
            {
                stop = true;
                return;
            }
            if (group.Name == "MY-APP-ALBUM-NAME")
            {
                stop = true;
                _current_album = group;
                SaveFileToCustomAlbum();
            }
        }
        catch (Exception ex)
        {

        }
    }


void SaveFileToCustomAlbum()
        {
            try
            {
                if (_current_album != null && !String.IsNullOrEmpty(_local_file_path))
                {
                    _lib.AssetForUrl(new Foundation.NSUrl(_local_file_path), delegate (ALAsset asset)
                    {
                        if (asset != null)
                        {

                            _current_album.AddAsset(asset);
                        }
                        else
                        {
                            Console.WriteLine("ASSET == NULL.");
                        }
                    }, delegate (NSError assetError)
                    {
                        Console.WriteLine(assetError.ToString());
                    });
                }
            }
            catch (Exception ex)
            {

            }
        }

所以这段代码做了: 1)将视频保存到我的视频的本地文件夹 - 方法 SaveFileToApplicationFolder 2)然后将视频文件保存到照片库 - 方法 SaveVideo 3)然后从app文件夹中删除文件(故意不增加应用程序文件夹大小(应用程序大小)---如果它的CORRECT逻辑? 4)然后将资产放入我的应用程序的自定义相册

所以这里的一切都适合我......但是! 当用户打开项目时我需要加班 - 检查他是否已经在照片库中有此项目的视频?

在这里,我堆叠......我只是不明白我如何检查用户是否有特定的视频?我没有找到热门设置资产的名称和热门寻找资产的名称...所以不知道找到这些资产的热点...... METADATA ??对象的Key_VALUE ??

2 个答案:

答案 0 :(得分:0)

请参阅Obj-C Check if image already exists in Photos gallery

简而言之:

  1. 使用assetUrl

  2. 保存视频时存储NSUserDefaults
  3. 下次打开时,检查带有assetUrl的照片库中是否存在视频。

答案 1 :(得分:0)

您可能只想使用xam.plugin.media nuget包。它可以非常轻松地拍摄和存储视频,以及访问默认视频选择器以选择现有视频