我正在尝试列出我服务中前台和后台运行的所有应用程序。我看到的电流似乎只返回我的应用程序的名称,而其他服务没有列出。似乎是因为API的一些变化> 21.我的目标API是22.有人可以帮助我使用代码列出所有应用程序名称和PID
我目前的代码是
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.getRunningAppProcesses()
List<ActivityManager.RunningAppProcessInfo> processInfoList = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfoList) {
Log.d("MyService", "...." + processInfo.processName );
}
我也尝试了getAppTasks()
,但它也返回同样的东西。
答案 0 :(得分:0)
试试这个
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.getRunningAppProcesses()
List<ActivityManager.RunningAppProcessInfo> processInfoList = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfoList) {
Log.d("MyService", "...." + processInfo.processName);
}
} else {
UsageStatsManager usage = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> stats = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
if (stats != null) {
SortedMap<Long, UsageStats> runningTask = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : stats) {
runningTask.put(usageStats.getLastTimeUsed(), usageStats);
}
}
}
并在清单中添加此行
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.GET_TASKS" />
并且在活动中创建
if (hasPermissionToReadNetworkHistory()) {
// do your stuff here
}
最后这个方法
private boolean hasPermissionToReadNetworkHistory() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return true;
}
final AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
android.os.Process.myUid(), getPackageName());
if (mode == AppOpsManager.MODE_ALLOWED) {
return true;
}
appOps.startWatchingMode(AppOpsManager.OPSTR_GET_USAGE_STATS,
getApplicationContext().getPackageName(),
new AppOpsManager.OnOpChangedListener() {
@Override
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onOpChanged(String op, String packageName) {
int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
android.os.Process.myUid(), getPackageName());
if (mode != AppOpsManager.MODE_ALLOWED) {
return;
}
appOps.stopWatchingMode(this);
Intent intent = new Intent(ChildMainActivity.this, ChildMainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
}
});
requestReadNetworkHistoryAccess();
return false;
}