/**
* 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解決!