Как узнать, когда приложение отображается «сейчас» на экране Android - PullRequest
0 голосов
/ 05 июля 2019

Я хочу добиться следующего поведения:

Приложение должно определить, открыто ли другое приложение, и показать сообщение в журнале. Например: если открыть приложение Facebook, я должен увидеть в Logcat:

 Log.d(TAG, "Facebook was open").

В настоящее время я использую Сервис, который каждую секунду просматривает, какое приложение открыто. Я не использую WorkManager, потому что мне нужно всегда проверять приложение, видимое для пользователя. (Диспетчер работ имеет запас 15 минут между каждым запросом в фоновом режиме).

К сожалению, мой код всегда возвращает имя пакета моего приложения, а не приложения, показанного «now» на экране. Как можно увидеть не только мое приложение, но и открытое в данный момент приложение?

Это код, который я использую для отображения текущего приложения на экране (происходит сбой, потому что всегда показывает мое собственное приложение).

fun isAppRunning (context: Context, packageName: String): Boolean {
    val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    val procInfos: List<ActivityManager.RunningAppProcessInfo> = activityManager.runningAppProcesses
    if (procInfos != null) {
        for (processInfo in procInfos) {
            Log.d("TAG", "the application now in screen is "+
                    processInfo.processName)
            if (processInfo.processName == packageName) {
                return true
            }
        }
    }
    return false
}

Вот как я вызываю эту функцию в Сервисе:

isAppRunning(applicationContext, "com.facebook.katana")

1 Ответ

0 голосов
/ 05 июля 2019

Я думаю, что это самое близкое, что вы можете получить, но вам все равно потребуется специальное разрешение (не время выполнения). Вам нужно будет сохранить значения и сравнить с последним использованным временем:

https://developer.android.com/reference/android/app/usage/UsageStatsManager

...