我正在開發一個 Xamarin Forms 應用程式,用戶可以在其中拍攝視頻并將其保存到公共外部存盤中。我目前正在保存創建的視頻的檔案名。我的視頻保存方式:
private readonly string DirectoryName = "KiloFürKilo";
public async Task<string> CaptureVideoAsync()
{
var photo = await MediaPicker.CaptureVideoAsync();
await using var stream = await photo.OpenReadAsync();
await using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
var filename = "KforK" DateTime.Now ".mp4";
SaveVideoFromByte(memoryStream.ToArray(), filename);
return filename;
}
private async void SaveVideoFromByte(byte[] imageByte, string filename)
{
var context = CrossCurrentActivity.Current.AppContext;
var mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
//Android 10
if (Android.OS.Build.VERSION.SdkInt > Android.OS.BuildVersionCodes.P)
{
using var resolver = context.ContentResolver;
var contentValues = new ContentValues();
contentValues.Put(MediaStore.IMediaColumns.DisplayName, filename);
contentValues.Put(MediaStore.IMediaColumns.MimeType, "video/mp4");
contentValues.Put(MediaStore.IMediaColumns.RelativePath, "DCIM/" DirectoryName);
var uri = resolver.Insert(MediaStore.Video.Media.ExternalContentUri, contentValues);
using var stream = resolver.OpenOutputStream(uri);
await stream.WriteAsync(imageByte);
stream.Close();
mediaScanIntent.SetData(uri);
}
else
{
var rootPath =
Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMovies);
var storagePath = Path.Combine(rootPath.ToString(), DirectoryName);
if (!File.Exists(storagePath))
{
Directory.CreateDirectory(storagePath);
}
string path = Path.Combine(storagePath.ToString(), filename);
File.WriteAllBytes(path, imageByte);
mediaScanIntent.SetData(Android.Net.Uri.FromFile(new Java.IO.File(path)));
}
context.SendBroadcast(mediaScanIntent);
}
我現在希望能夠打開和播放視頻,而無需用戶從圖庫中選擇它。如何通過檔案名在外部公共存盤中找到視頻并檢索到它的路徑?我想我必須使用 MediaStore,但不知道如何使用。感謝任何可以幫助我解決此問題的人:)
uj5u.com熱心網友回復:
MediaStore insert() 為您提供了寫入檔案的 uri。
要讀取/播放檔案,您可以使用相同的 uri。
此外,您的相對路徑是“DCIM/” DirectoryName;
如果您需要路徑,則完整路徑為“/storage/emulated/0/DCIM/” DirectoryName “/” filename。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/313145.html
