[英]Can I check available storage in the Device on Xamarin Forms?
我正在嘗試制作一個需要我經常將記錄的數據發送到 firebase 的應用程序。 當網絡中斷或電池即將耗盡時,我將所有未存儲到 firebase 的數據保存在本地。 但是,要做到這一點,我需要大約 20 MB 的數據(我的數據非常大)。 話雖如此,我想找到一種方法來檢查可用的存儲空間(如果可能的話,還要檢查電池)給用戶一個警告。 這可以使用 Xamarin Forms 嗎? 另外,有沒有一種方法可以使這個解決方案變得通用(即我不需要為 iOS 與 Android 編寫單獨的代碼)? (我是 Xamarin 和 C# 的新手)
使用以下代碼檢查設備的可用大小:
對於 iOS:
NSFileManager.DefaultManager.GetFileSystemAttributes (Environment.GetFolderPath (Environment.SpecialFolder.Personal)).FreeSize;
對於 Android:
var freeExternalStorage = Android.OS.Environment.ExternalStorageDirectory.UsableSpace;
沒有通用選項,但您可以將它包裝成這樣的接口並在每個項目中實現它:
public interface IStorage
{
double GetRemainingStorage();
}
如果可以在 Xamarin.Essentials 中添加這樣的功能,那就太好了——在 GitHub 上有一個請求,但它從未真正實現過。
如果代碼有任何問題 - 請告訴我。
希望這有幫助,
說明在您的共享項目中創建一個名為IStorage
的接口。
在您的 Android 項目中,創建一個名為AndroidStorageManager
的 class(您可以隨意命名)。 使它擴展IStorage
。 GetRemainingStorage()
方法的返回類型應該是double
。
public class AndroidStorageManager : IStorage
{
public double GetRemainingStorage()
{
var freeExternalStorage = Android.OS.Environment.ExternalStorageDirectory.UsableSpace;
return freeExternalStorage;
}
}
對於 iOS在您的 iOS 項目中創建一個 class ,標題為iOSStorageManager
擴展IStorage
:
public class iOSStorageManager : IStorage
{
public double GetRemainingStorage()
{
return NSFileManager.DefaultManager.GetFileSystemAttributes(Environment.GetFolderPath(Environment.SpecialFolder.Personal)).FreeSize;
}
}
在您的 Android 實現中 - 在命名空間上方添加以下代碼:
[assembly: Xamarin.Forms.Dependency(
typeof(AndroidStorageManager))]
對於 iOS:
[assembly: Xamarin.Forms.Dependency(
typeof(iOSStorageManager))]
獲取存儲空間:
IStorage storageManager = DependencyService.Get<IStorage>();
double remaining = storageManager.GetRemainingStorage();
希望這能澄清事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.