MobileUseStatisticsPlugin.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import Flutter
  2. import Foundation
  3. @available(iOS 13.0, *)
  4. public class MobileUseStatisticsPlugin: NSObject, FlutterPlugin {
  5. public static func register(with registrar: FlutterPluginRegistrar) {
  6. let channel = FlutterMethodChannel(
  7. name: "mobile_use_statistics",
  8. binaryMessenger: registrar.messenger()
  9. )
  10. let instance = MobileUseStatisticsPlugin()
  11. registrar.addMethodCallDelegate(instance, channel: channel)
  12. }
  13. public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  14. switch call.method {
  15. case "getLockScreenStatistics":
  16. handleGetLockScreenStatistics(call: call, result: result)
  17. case "hasUseStatisticsPermission":
  18. result(true)
  19. case "requestUseStatisticsPermission":
  20. result(nil)
  21. case "appLaunchAnActivationPermission":
  22. BackgroundTaskManager.shared.registerBackgroundTask()
  23. ScreenLockMonitor.shared.startMonitoringInBackground()
  24. result(nil)
  25. case "appEntersTheBackenPermission":
  26. BackgroundTaskManager.shared.scheduleBackgroundTask()
  27. result(nil)
  28. default:
  29. result(FlutterMethodNotImplemented)
  30. }
  31. }
  32. private func handleGetLockScreenStatistics(call: FlutterMethodCall, result: @escaping FlutterResult) {
  33. do {
  34. guard let args = call.arguments as? [String: Any],
  35. let startTime = args["startTime"] as? Int,
  36. let endTime = args["endTime"] as? Int else {
  37. throw FlutterError(code: "INVALID_ARGUMENTS",
  38. message: "Required parameters: startTime(Int), endTime(Int)",
  39. details: nil) as! any Error
  40. }
  41. // 时间戳转换(秒级→Date)
  42. let startDate = Date(timeIntervalSince1970: TimeInterval(startTime))
  43. let endDate = Date(timeIntervalSince1970: TimeInterval(endTime))
  44. print("查询时间范围: \(startDate) - \(endDate)")
  45. // 获取事件对
  46. let eventPairs = EventQueryService.shared.getEventPairsBetween(
  47. startDate: startDate,
  48. endDate: endDate
  49. )
  50. // 转换为Flutter可接收的格式
  51. let response = eventPairs.map { pair in
  52. return [
  53. "startTime": Int((pair["startTime"]! as AnyObject).timeIntervalSince1970),
  54. "endTime": Int((pair["endTime"]! as AnyObject).timeIntervalSince1970)
  55. ]
  56. }
  57. print("responsesfsdfs--A-\(response)")
  58. result(response)
  59. } catch let error as FlutterError {
  60. result(error)
  61. } catch {
  62. result(FlutterError(code: "UNKNOWN_ERROR",
  63. message: error.localizedDescription,
  64. details: nil))
  65. }
  66. }
  67. }
  68. extension Date {
  69. /// Flutter时间戳(秒级)
  70. var flutterTimestamp: Int {
  71. return Int(timeIntervalSince1970)
  72. }
  73. /// 从Flutter时间戳初始化
  74. static func fromFlutterTimestamp(_ timestamp: Int) -> Date {
  75. return Date(timeIntervalSince1970: TimeInterval(timestamp))
  76. }
  77. }