android - 我可以检测到 android 手机中的所有应用程序都在后台运行吗?
问题描述
我想开发一个可以检测所有其他应用程序是否在后台运行的应用程序,而不仅仅是我自己的应用程序。
我做了很多搜索,但几乎所有人都在检测自己的应用程序,而不是全部。
任何帮助将不胜感激,谢谢!
解决方案
看看我创建的这个方法来获取所有正在运行的任务:
private void getRunningApps() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
assert manager != null;
if (android.os.Build.VERSION.SDK_INT <= 22) {
List<ActivityManager.RunningTaskInfo> task = manager.getRunningTasks(5);
} else {
String mpackageName = manager.getRunningAppProcesses().get(0).processName;
UsageStatsManager usage = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
assert usage != null;
List<UsageStats> stats = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, time);
if (stats != null) {
SortedMap<Long, UsageStats> runningTask = new TreeMap<>();
for (UsageStats usageStats : stats) {
runningTask.put(usageStats.getLastTimeUsed(), usageStats);
}
}
}
}
您需要权限才能获取清单中的所有任务:
<uses-permission android:name="android.permission.GET_TASKS" />
对于 Android M 或更高版本的动态检查权限:
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public boolean isAccessGranted() {
try {
PackageManager packageManager = getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0);
AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = 0;
if (Globals.currentVersion > android.os.Build.VERSION_CODES.KITKAT) {
assert appOpsManager != null;
mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
applicationInfo.uid, applicationInfo.packageName);
}
return (mode == AppOpsManager.MODE_ALLOWED);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
并征求许可。这是:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivityForResult(intent, REQUEST_ACCESSBILITY);
在哪里REQUEST_ACCESSBILITY
使用int REQUEST_ACCESSBILITY = 100
任何号码进行请求。
推荐阅读
- mysql - How to insert SUM() function that sums rows with similar ID in a code part of witch is unchangeable?
- wpf - 具有大填充分隔行选择的 DataGrid 单元格
- pdf - TestCafe: Testing a Page Opening a PDF in a New Tab
- python - 如何将多类标签更改为数据框中的二进制标签
- javascript - 从没有 ES6 的模块导入类
- reactjs - 在父视图和子组件上反应原生 IOS 语音(可访问性)
- kubernetes - Issues with Ports on headless service attached to Stateless Set
- java - 带有 Avro Schema 注册表的 Kafka 消费者单元测试失败
- python - Display latitude and longitude values on x and y axis
- ms-access - 为什么我的查询不可更新阻止我用它更新表?