Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенныхJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных

Сообщение Anonymous »

Мое приложение для очистки оперативной памяти Android не работает должным образом, поскольку оно не обнаруживает недавно использованные приложения для их очистки, хотя при запуске оно сначала запрашивает специальный доступ к использованию, а затем сканирует недавно использованные приложения по порядку. чтобы очистить их из ОЗУ. Я включил фоновый процесс уничтожения и разрешение на статистику использования в файле манифеста Android.
Я пробовал увеличивать и уменьшать временное окно с 24 часов до 5 минут, но это не работает как и должно быть
вот мой код, помогите мне найти решение, пожалуйста
package com.example.systemoptimizer6;

import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class RAMCleaner {
private static final String TAG = "RAMCleaner";
private final Context context;
private final PackageManager packageManager;
private final ActivityManager activityManager;

public static class AppInfo {
public final String appName;
public final Drawable appIcon;
public final String packageName;

public AppInfo(String appName, Drawable appIcon, String packageName) {
this.appName = appName;
this.appIcon = appIcon;
this.packageName = packageName;
}
}

public RAMCleaner(Context context) {
this.context = context;
this.packageManager = context.getPackageManager();
this.activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
}

@SuppressLint("ObsoleteSdkInt")
public List getRunningApps() {
List runningApps = new ArrayList();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.d(TAG, "Fetching apps using UsageStatsManager...");
runningApps = getAppsFromUsageStats();
}

if (runningApps.isEmpty()) {
Log.d(TAG, "UsageStatsManager returned no apps. Fallback to ActivityManager...");
runningApps = getAppsFromActivityManager();
}

if (runningApps.isEmpty()) {
Log.d(TAG, "No apps detected. Ensure permissions are granted.");
}

return runningApps;
}

private List getAppsFromUsageStats() {
List runningApps = new ArrayList();
UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);

long currentTime = System.currentTimeMillis();
long timeWindow = currentTime - 1000 * 60 * 5; // Last 5 minutes

List usageStatsList = usageStatsManager.queryUsageStats(
UsageStatsManager.INTERVAL_DAILY,
timeWindow,
currentTime
);

if (usageStatsList == null || usageStatsList.isEmpty()) {
Log.d(TAG, "No usage stats available.");
return runningApps;
}

usageStatsList.sort((u1, u2) -> Long.compare(u2.getLastTimeUsed(), u1.getLastTimeUsed()));

for (UsageStats usageStats : usageStatsList) {
String packageName = usageStats.getPackageName();
try {
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);

if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 && !packageName.equals(context.getPackageName())) {
String appName = packageManager.getApplicationLabel(appInfo).toString();
Drawable appIcon = packageManager.getApplicationIcon(appInfo);
runningApps.add(new AppInfo(appName, appIcon, packageName));
Log.d(TAG, "Detected app: " + appName);
}
} catch (PackageManager.NameNotFoundException e) {
Log.d(TAG, "App not found: " + packageName + ", skipping.");
}
}

return runningApps;
}

private List getAppsFromActivityManager() {
List runningApps = new ArrayList();
List runningProcesses = activityManager.getRunningAppProcesses();

if (runningProcesses == null || runningProcesses.isEmpty()) {
Log.d(TAG, "No running processes found.");
return runningApps;
}

for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
String packageName = processInfo.processName;

if (processInfo.importance > ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
continue; // Skip non-active apps
}

try {
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);

if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 && !packageName.equals(context.getPackageName())) {
String appName = packageManager.getApplicationLabel(appInfo).toString();
Drawable appIcon = packageManager.getApplicationIcon(appInfo);
runningApps.add(new AppInfo(appName, appIcon, packageName));
Log.d(TAG, "Detected app (ActivityManager): " + appName);
}
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "App not found: " + packageName, e);
}
}

return runningApps;
}

@SuppressLint("ObsoleteSdkInt")
public void cleanApps(List packageNames) {
for (String packageName : packageNames) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activityManager.killBackgroundProcesses(packageName);
Log.d(TAG, "Killed background process: " + packageName);
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ly-running
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»