You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.iOS iPad应用获取设备开机、应用启停及后台时间方法问询

Xamarin.iOS 获取设备及应用时间信息实现方案

一、获取设备开机时间

通过NSProcessInfo获取系统运行时长,结合当前时间计算出开机时间:

using Foundation;
using System;

public static class DeviceTimeHelper
{
    public static DateTime GetDeviceBootTime()
    {
        // 获取系统从开机到当前的运行秒数
        double systemUptime = NSProcessInfo.ProcessInfo.SystemUptime;
        // 当前时间减去运行时长得到开机时间
        NSDate bootTimeNs = NSDate.Now.Subtract(TimeSpan.FromSeconds(systemUptime));
        // 转换为.NET DateTime类型
        return bootTimeNs.ToDateTime();
    }
}

二、获取应用启动时间

有两种可靠实现方式:

方式1:自定义记录启动时间(AppDelegate中)

在应用启动入口FinishedLaunching方法中记录时间,适合需要自定义启动节点的场景:

using UIKit;
using System;

namespace YourAppNamespace
{
    [Register("AppDelegate")]
    public class AppDelegate : UIApplicationDelegate
    {
        // 静态变量存储应用启动时间
        public static DateTime AppLaunchTime { get; private set; }

        public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            AppLaunchTime = DateTime.Now;
            // 其他初始化逻辑...
            return true;
        }
    }
}

后续在任意位置调用AppDelegate.AppLaunchTime即可获取该时间。

方式2:获取进程启动时间(更精准)

通过NSProcessInfo直接获取应用进程的启动时间,该时间更接近应用实际启动的节点:

using Foundation;
using System;

public static class AppTimeHelper
{
    public static DateTime GetAppProcessStartTime()
    {
        return NSProcessInfo.ProcessInfo.StartTime.ToDateTime();
    }
}

三、获取应用进入后台的时间

监听应用生命周期的后台进入事件,在DidEnterBackground方法中记录时间:

using UIKit;
using System;

namespace YourAppNamespace
{
    [Register("AppDelegate")]
    public class AppDelegate : UIApplicationDelegate
    {
        // 可空类型存储后台进入时间(应用未进入后台时为null)
        public static DateTime? AppEnteredBackgroundTime { get; private set; }

        public override void DidEnterBackground(UIApplication application)
        {
            AppEnteredBackgroundTime = DateTime.Now;
            // 其他后台处理逻辑...
        }

        // 可选:应用回到前台时重置该值(根据需求决定)
        public override void WillEnterForeground(UIApplication application)
        {
            AppEnteredBackgroundTime = null;
        }
    }
}

注意:应用每次进入后台时,该值会被更新为最新的后台进入时间。


内容的提问来源于stack exchange,提问作者Roshil K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:54:09