以编程方式从 iOS 12 中的屏幕时间获取应用程序使用情况

问题描述 投票:0回答:4

我正在开发一个项目,我想获得其他应用程序的使用时间。苹果推出了iOS 12并提供了新功能

Screen Time
。我想知道Apple有没有提供任何方法或API可以从中获取数据。

ios iphone-x xcode10 ios12
4个回答
11
投票

不可以,在 iOS 上,每个应用程序都在自己的沙箱中运行,无法看到其他应用程序的数据,甚至是来自同一发布者的应用程序。应用程序可以访问特殊的共享数据,例如相册中的照片或联系人数据,但应用程序无法直接访问其他应用程序编写的文件。

ScreenTime 应用程序与您的应用程序位于另一个沙箱上。除非苹果提供API,否则我们无法访问它。


更新

自从苹果在ios12模拟器中添加了屏幕时间应用程序。他们可能很快就会提供 API。


2
投票

在 iOS 15 上苹果添加了一个 API,请参见这里: https://developer.apple.com/documentation/FamilyControls

家庭控制

授权您的应用程序提供家长控制 孩子的设备。要授权您的家长控制应用程序,请使用共享 授权中心实例。您只能授权家长控制 在属于家庭共享组并登录到的设备上 孩子的 iCloud 帐户。

您必须将家庭控制功能添加到您的应用程序中。


0
投票

这似乎只为家长控制应用程序提供功能。换句话说,目前其他时间跟踪或生产力应用程序无法使用它。


0
投票

是的,可以使用 Screen Time API 获取屏幕时间数据,该 API 包含三个框架:

  1. 家长控制
  2. 设备活动
  3. 托管设置

通过这三个框架,您可以检索屏幕时间信息。

要将其集成到 Xcode iOS 项目中,请转到文件 -> 新建 -> 目标 -> 设备活动报告扩展。这会将设备活动报告扩展目标添加到您的项目中,并自动创建三个文件:

  1. ScreenTimeReport.swift
  2. TotalActivityReport.swift
  3. TotalActivityView.swift

要显示用户的总屏幕时间,请将以下代码添加到任何视图文件中。这将提示用户获得许可,并在批准后显示他们的屏幕时间。

struct ExampleView: View {
    @State private var context: DeviceActivityReport.Context = .init(rawValue: "Total Activity")
    @State private var filter = DeviceActivityFilter(
        segment: .daily(
            during: Calendar.current.dateInterval(
                of: .day, for: .now
            )!
        ),
        users: .all,
        devices: .init([.iPhone, .iPad])
    )
    
    var body: some View {
        DeviceActivityReport(context, filter: filter)
    }
}

此代码将调用 TotalActivityView.swift 文件。

万岁!将显示屏幕时间。

© www.soinside.com 2019 - 2024. All rights reserved.