簡體   English   中英

我可以在 Xamarin Forms 上檢查設備中的可用存儲嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM