c# - 我可以在 Xamarin Forms 上检查设备中的可用存储吗?
问题描述
我正在尝试制作一个需要我经常将记录的数据发送到 Firebase 的应用程序。当网络中断或电池即将耗尽时,我将所有未存储到本地 firebase 的数据保存起来。但是,要做到这一点,我需要大约 20 MB 的数据(我的数据非常大)。话虽如此,我想找到一种方法来检查可用的存储空间(如果可能的话,还要检查电池)以向用户发出警告。这可以使用 Xamarin Forms 吗?另外,有没有一种方法可以使这个解决方案通用(即我不需要为 iOS 和 Android 编写单独的代码)?(我是 Xamarin 和 C# 的新手)
解决方案
使用以下代码检查设备的可用大小:
对于 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 上有一个请求,但它从未真正实现过。
如果代码有任何问题 - 请告诉我。
希望这有帮助,
说明在您的共享项目中
创建一个名为IStorage
.
在你的 Android 项目中创建一个名为的类AndroidStorageManager
(你可以随意命名它)。让它延伸IStorage
。该方法GetRemainingStorage()
应该是返回类型double
。
public class AndroidStorageManager : IStorage
{
public double GetRemainingStorage()
{
var freeExternalStorage = Android.OS.Environment.ExternalStorageDirectory.UsableSpace;
return freeExternalStorage;
}
}
对于 iOS
在您的 iOS 项目中创建一个名为iOSStorageManager
extends的类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();
希望这能澄清事情。
推荐阅读
- python - 带有散景小部件的 Holoviews AdjointLayout
- matplotlib - \frac{}{} 在 plt.text 中不起作用?
- db2 - 导出的时间戳在加载回数据库后正在更改值
- c# - 如何处理继承的 ViewModel 中的 MustOverride(虚拟)属性
- asp.net-core-mvc - .Models 没有出现在使用 ProjectName 中。asp core2 空应用程序中的“Models”
- javascript - 二叉搜索树序列化格式
- android - 每当我滑动到新页面时,Viewpager 都会向下滚动
- sql - SQL Server 使用 order by 子句显着提高了选择性能
- node.js - 节点请求失败,套接字挂起
- python - 如何在 Python 中通过 Pipe 交换数据?