Как получать экранное время каждый деньAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получать экранное время каждый день

Сообщение Anonymous »

Я разрабатываю приложение экранного времени, с помощью которого пользователь может ежедневно отслеживать свое экранное время, но столкнулся с ошибкой. Экранное время должно показываться ежедневно. В 12 часов ночи он должен быть сброшен и установлен на 0, но в моем случае он не сбрасывается и показывает некоторое экранное время за последние несколько часов и добавляется к экранному времени следующего дня. Я поделюсь с вами необходимым кодом
@SuppressLint("QueryPermissionsNeeded")
override suspend fun getAppUsageStats(date: LocalDate): List {
val usageStateManager =
context.getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager

val startTime = date.atTime(0, 0).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
Log.d("AppUsageStats", "Start Time Zone: ${ZoneId.systemDefault()}")

val endTime =
date.plusDays(1).atTime(0, 0, 10).atZone(ZoneId.systemDefault()).toInstant()
.toEpochMilli()
// Log the query times to debug potential midnight reset issues
Log.d("AppUsageStats", "Querying from $startTime to $endTime")

// Use queryUsageStats to get detailed usage data
val usageStatsList = usageStateManager.queryUsageStats(
UsageStatsManager.INTERVAL_BEST, // Use INTERVAL_DAILY here
startTime,
endTime
)
val aggregatedUsageStats = usageStatsList.groupBy { it.packageName }
.mapValues { (_, stats) ->
stats.fold(
com.example.focusapp.feature_screen_time.domain.model.UsageStats(
packageName = stats[0].packageName
)
) { acc, stat ->
acc.totalTimeInForeground += stat.totalTimeInForeground
acc
}
}

Log.d("AppUsageStats", "Aggregated Usage Stats: $aggregatedUsageStats")

if (aggregatedUsageStats.isNullOrEmpty()) {
Log.e("AppUsageStats", "No usage stats available for the given date")
return emptyList()
}
// retrieve the list of installed apps
val installedApps =
context.packageManager.getInstalledApplications(PackageManager.GET_META_DATA)
val appNameMap = installedApps.associate { appInfo ->
appInfo.packageName to context.packageManager.getApplicationLabel(appInfo).toString()
}

val appUsageStats = aggregatedUsageStats.mapNotNull { (packageName, usageStats) ->

val icon = try {
context.packageManager.getApplicationIcon(packageName)
} catch (e: PackageManager.NameNotFoundException) {
getFallbackIcon()
}
val appName =
appNameMap[packageName] ?: resolveSystemAppName(packageName) ?: packageName

if (!isSystemApp(packageName)) {

AppUsageStats(
appName = appName,
timeSpent = usageStats.totalTimeInForeground,
packageName = packageName,
icon = icon
)
} else {
null
}
}
return appUsageStats
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... aily-basis
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»