/**
* Created by xyl 2020/7/4.
*/
class RunningTaskUtil(context: Context) {
private val TAG = "RunningTaskUtil"
private lateinit var mUsageStatsManager: UsageStatsManager
private var topComponentName: ComponentName? = null
init {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mUsageStatsManager = context.applicationContext
.getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager
}
}
fun getTopRunningTasks(): ComponentName? {
return getTopRunningTasksByEvent()
}
private fun getTopRunningTasksByEvent(): ComponentName? {
val time = System.currentTimeMillis()
val usageEvents: UsageEvents =
mUsageStatsManager.queryEvents(time - 60 * 60 * 1000, time)
var out: UsageEvents.Event
val map = TreeMap<Long, UsageEvents.Event>()
if (usageEvents != null) {
while (usageEvents.hasNextEvent()) {
out = UsageEvents.Event()
if (usageEvents.getNextEvent(out)) {
if (out != null) {
map[out.timeStamp] = out
} else {
Log.e(TAG, " out is NULL")
}
} else {
Log.e(TAG, " usageEvents is unavailable")
}
}
if (!map.isEmpty()) {
val keySets = map.navigableKeySet()
val iterator = keySets.descendingIterator()
while (iterator.hasNext()) {
val event = map[iterator.next()]
if (event!!.eventType == UsageEvents.Event.MOVE_TO_FOREGROUND) {
topComponentName = ComponentName(event.packageName, "")
break
}
}
}
} else {
Log.e(TAG, "null")
}
return topComponentName
}
}
在一个需要获取App是否在前台或桌面状态时,搜索到的几乎千篇一律的是5.0以前的或者是用的queryUsageStats这个方法,导致无法获取是否在桌面的状态,改成queryEvents方法后,BUG解决!
本文介绍了一种在Android 5.0及以上版本中有效获取当前运行在最前端任务的方法,通过使用UsageStatsManager的queryEvents替代传统的queryUsageStats,解决了无法准确判断应用是否处于桌面状态的问题。
684

被折叠的 条评论
为什么被折叠?



