appUsageData method

  1. @override
Future<List<AppUsage>> appUsageData({
  1. DateTime? startTime,
  2. DateTime? endTime,
  3. UsageInterval usageInterval = UsageInterval.daily,
  4. List<String>? packagesName,
})
override

Fetch app usage data from the device.

Returns a map with the following keys:

  • status: Whether the data was successfully fetched.
  • data: Map of app bundle IDs to usage data.
  • error: Error message if the data fetch failed.

Implementation

@override
Future<List<AppUsage>> appUsageData({
  DateTime? startTime,
  DateTime? endTime,
  UsageInterval usageInterval = UsageInterval.daily,
  List<String>? packagesName,
}) async {
  final arguments = <Object?, Object?>{};
  if (startTime != null) {
    arguments[Argument.startTimeInMillisecond] =
        startTime.millisecondsSinceEpoch;
  }
  if (endTime != null) {
    arguments[Argument.endTimeInMillisecond] = endTime.millisecondsSinceEpoch;
  }

  if (packagesName != null) {
    arguments[Argument.packagesName] = packagesName;
  }

  final result = await methodChannel.invokeMethod<Map<Object?, Object?>>(
      MethodName.appUsageData, arguments);

  return await Isolate.run(() async {
    final map = await _convertToStringDynamicMap(result);
    final response = BaseAppUsage.fromJson(map);
    if (response.status) {
      return response.data;
    } else {
      debugPrint(map.toString());
      return <AppUsage>[];
    }
  });
}