gpt4 book ai didi

android - 是否有 getRunningTask API 的替代方案

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:17 25 4
gpt4 key购买 nike

我在我的一个应用程序中使用 getRunningTask API 来查找前台应用程序。自 Lollipop 以来,此 API 已被弃用。弃用之后,我更喜欢 getRunningAppProcess API 和 Importance_Foreground。我还从该列表中排除了 REASON_SERVICE 和 REASON_PROVIDER。我根据逻辑过滤掉了系统应用程序,效果很好。问题是,如果应用程序 A 在前台,我会把应用程序 B 作为峰值。因此,这种方法目前是值得怀疑的。除了 getRunningTask API,还有其他替代方法吗?还是我在当前方法中遗漏了任何简单的东西。请大家帮忙。

最佳答案

基于对 this question 的回答

String getTopPackage(){
long ts = System.currentTimeMillis();
UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats");
List<UsageStats> usageStats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, ts-1000, ts);
if (usageStats == null || usageStats.size() == 0) {
return NONE_PKG;
}
Collections.sort(usageStats, mRecentComp);
return usageStats.get(0).getPackageName();
}

这是mRecentComp:

static class RecentUseComparator implements Comparator<UsageStats> {

@Override
public int compare(UsageStats lhs, UsageStats rhs) {
return (lhs.getLastTimeUsed() > rhs.getLastTimeUsed()) ? -1 : (lhs.getLastTimeUsed() == rhs.getLastTimeUsed()) ? 0 : 1;
}
}

需要此权限:

<uses-permission xmlns:tools="http://schemas.android.com/tools"
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />

并且您需要用户授权才能请求统计信息,使用它可以将用户引导至设置页面:

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);

你可以检查你是否已经有这样的权限:

public static boolean needPermissionForBlocking(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
return (mode != AppOpsManager.MODE_ALLOWED);
} catch (PackageManager.NameNotFoundException e) {
return true;
}
}

关于android - 是否有 getRunningTask API 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26714285/

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