Как это:
Java-версия
private String retriveAppInForeground() {
String currentApp = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
UsageStatsManager usm = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> appList = null;
if (usm != null) {
appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
}
if (appList != null && !appList.isEmpty()) {
SortedMap<Long, UsageStats> sortedMap = new TreeMap<>();
for (UsageStats usageStats : appList) {
sortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (!sortedMap.isEmpty()) {
currentApp = sortedMap.get(sortedMap.lastKey()).getPackageName();
}
}
} else {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (am != null) {
currentApp =(am.getRunningTasks(1).get(0)).topActivity.getPackageName();
}
}
Log.e("ActivityTAG", "Application in foreground: " + currentApp);
return currentApp;
}
Kotlin версия
private fun retriveAppInForeground(): String? {
var currentApp: String? = null
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
val usm = this.getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager
val time = System.currentTimeMillis()
val appList: List<UsageStats>?
appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time)
if (appList != null && appList.isNotEmpty()) {
val sortedMap = TreeMap<Long, UsageStats>()
for (usageStats in appList) {
sortedMap.put(usageStats.lastTimeUsed, usageStats)
}
currentApp = sortedMap.takeIf { it.isNotEmpty() }?.lastEntry()?.value?.packageName
}
} else {
val am = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
@Suppress("DEPRECATION") //The deprecated method is used for devices running an API lower than LOLLIPOP
currentApp = am.getRunningTasks(1)[0].topActivity.packageName
}
Log.e("ActivityTAG", "Application in foreground: " + currentApp)
return currentApp
}
Убедитесь, что у вашего приложения есть необходимые разрешения для доступа к статистике использования:
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
И чтобы пользователь предоставил надлежащее разрешение, вы можете перевести его на соответствующий экран настроек, чтобы активировать разрешение (при настройке приложения):
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
И еще одна вещь, всегда убедитесь, что вы ищете любой аналогичный вопрос , прежде чем публиковать новый.