Почему мое приложение 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

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