我是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 ??
答案 0 :(得分:0)
请参阅Obj-C Check if image already exists in Photos gallery
简而言之:
使用assetUrl
NSUserDefaults
下次打开时,检查带有assetUrl
的照片库中是否存在视频。
答案 1 :(得分:0)
您可能只想使用xam.plugin.media nuget包。它可以非常轻松地拍摄和存储视频,以及访问默认视频选择器以选择现有视频