gpt4 book ai didi

java - Android:如何检查应用程序是否正在运行

转载 作者:行者123 更新时间:2023-12-02 10:16:56 24 4
gpt4 key购买 nike

我需要按 packageName 检查是否正在运行应用程序。在 v.21 之前,我只是获取正在运行的应用程序和舞蹈的列表。但现在它不起作用 - 仅返回一个我的应用程序。我知道我需要使用“统计使用情况”,但找不到完整的示例。

我不需要所有这些分析,我需要一个简单的函数

bool isRunning(String packageName)

如何在新的 Android (>21) 上实现它而不需要围绕它跳舞?

更新。 code4rox 的答案最好。一切都好,谢谢!

我使用此代码来检查权限:

import android.content.pm.PackageManager;
import android.content.pm.ApplicationInfo;
import android.app.AppOpsManager;
import android.util.Log;
import android.provider.Settings;

try {
PackageManager packageManager = getContext().getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getContext().getPackageName(), 0);
AppOpsManager appOpsManager = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
if (!(mode == AppOpsManager.MODE_ALLOWED)) {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
}
} catch (PackageManager.NameNotFoundException e) {}

这是检查应用程序:

import android.util.Log;
import android.app.usage.UsageStatsManager;
import android.app.usage.UsageStats;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.ArrayList;

public boolean isRunning(Context context, long timeMills, String app) {
boolean result = false;
//timeMils = 1000
UsageStatsManager usm = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - timeMills, time);
if (appList != null && appList.size() > 0) {
for (UsageStats usageStats : appList) {
String appname = usageStats.getPackageName();
Log.i("DOM_LAUNCHER", "Running app: " + appname);
if (app.equals(appname)) {
result = true;
}
}
}
return result;
}

最佳答案

出于安全原因,没有任何方法可以获取 API 级别 (>21) 中所有正在运行的应用程序。

但是

You can access to app usage history and statistics with the time intervals: days, weeks, months, and years with UsageStatsManager

这里是官方文档 Link

其他应用程序(例如clean master、ccleaner)使用此技术来运行应用程序。

Here是使用 UsageStatsManager

获取应用程序列表的示例

Note: You must give Usage Access Permission before use UsageStatsManager

关于java - Android:如何检查应用程序是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com