Я хочу добиться следующего поведения:
Приложение должно определить, открыто ли другое приложение, и показать сообщение в журнале.
Например: если открыть приложение 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")