我可以在 Xamarin Forms 上检查设备中的可用存储空间吗?

2024-04-13

我正在尝试制作一个应用程序,要求我经常将记录的数据发送到 firebase。当网络中断或电池即将耗尽时,我会保存所有未本地存储到 firebase 中的数据。然而,要做到这一点,我需要大约 20 MB 的数据(我的数据相当大)。话虽这么说,我想找到一种方法来检查可用存储空间(如果可能的话还检查电池)以向用户发出警告。使用 Xamarin Forms 可以实现这一点吗?另外,有没有办法让这个解决方案变得通用(即我不需要针对 iOS 和 Android 编写单独的代码)? (我是 Xamarin 和 C# 的新手)


使用以下代码检查设备的可用大小:

For iOS:

NSFileManager.DefaultManager.GetFileSystemAttributes (Environment.GetFolderPath (Environment.SpecialFolder.Personal)).FreeSize;

对于安卓:

var freeExternalStorage = Android.OS.Environment.ExternalStorageDirectory.UsableSpace;

没有通用的选项,但您可以将其包装为像这样的接口并在每个项目上实现它:

public interface IStorage
{
    double GetRemainingStorage();
}

如果可以在 Xamarin.Essentials 中添加这样的功能,那就太好了 - GitHub 上有一个请求,但从未真正实现。

如果代码有任何问题 - 请告诉我。

希望这有帮助,

指示在您的中创建一个界面共享项目 titled IStorage.

在您的 Android 项目中创建一个名为AndroidStorageManager(您可以随意命名)。让它延伸IStorage。方法GetRemainingStorage()应该是返回类型double.

 public class AndroidStorageManager : IStorage
    {
        public double GetRemainingStorage()
        {
            var freeExternalStorage = Android.OS.Environment.ExternalStorageDirectory.UsableSpace;

            return freeExternalStorage;
        }
    }

For iOS在您的 iOS 项目中创建一个名为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))]

For iOS:

[assembly: Xamarin.Forms.Dependency(
          typeof(iOSStorageManager))]

获取存储空间:

 IStorage storageManager = DependencyService.Get<IStorage>();
            double remaining = storageManager.GetRemainingStorage();

希望这能澄清事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 Xamarin Forms 上检查设备中的可用存储空间吗? 的相关文章

随机推荐