解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
1.93 KiB
X
using Foundation;
using NewLife;
using UIKit;

namespace Mobile.iOSHost;

/// <summary>iOS 宿主机器信息补充</summary>
/// <remarks>设备名称、稳定标识与电池信息无法由 NewLife.Core 直接读取,由宿主补充。</remarks>
public sealed class IOSMachineInfoProvider : IMachineInfo
{
    /// <summary>补充静态信息</summary>
    /// <param name="info">机器信息</param>
    public void Init(MachineInfo info)
    {
        var device = UIDevice.CurrentDevice;

        var name = device.Name;
        if (!name.IsNullOrEmpty()) info["DeviceName"] = name;

        var id = GetIdentifier();
        if (!id.IsNullOrEmpty())
        {
            info.UUID = id;
            if (info.Guid.IsNullOrEmpty() || info.Guid.StartsWith("0-")) info.Guid = id;
        }

        try
        {
            device.BatteryMonitoringEnabled = true;
        }
        catch { }
    }

    /// <summary>刷新实时信息</summary>
    /// <param name="info">机器信息</param>
    public void Refresh(MachineInfo info)
    {
        try
        {
            var device = UIDevice.CurrentDevice;
            if (!device.BatteryMonitoringEnabled) device.BatteryMonitoringEnabled = true;

            var level = device.BatteryLevel;
            if (level >= 0) info.Battery = level;
        }
        catch { }
    }

    private static String? GetIdentifier()
    {
        try
        {
            var id = UIDevice.CurrentDevice.IdentifierForVendor?.ToString();
            if (!id.IsNullOrEmpty()) return id;
        }
        catch { }

        try
        {
            var defaults = NSUserDefaults.StandardUserDefaults;
            var id = defaults.StringForKey("device_id");
            if (id.IsNullOrEmpty())
            {
                id = Guid.NewGuid().ToString("N");
                defaults.SetString(id, "device_id");
            }

            return id;
        }
        catch
        {
            return null;
        }
    }
}