監聽所有App的前後臺活動狀態


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章