Поле требует уровня API 29 (текущий минимум 16): android .app.TaskInfo # topActivity - PullRequest
0 голосов
/ 21 февраля 2020

Я пытался проверить, находится ли активность на переднем или на заднем плане, поэтому я нашел ее с помощью диспетчера активности. Когда мой compileSdkVersion 28, приложение успешно скомпилировано. Когда я запускаю тот же код с compileSdkVersion 29, я получаю ошибку ниже,

The field requires API level 29 (current min is 16): android.app.TaskInfo#topActivity


import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.util.Log;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class ActivityState {
    private Timer timer;
    Context cntx;
    Session session;

    public boolean isAppIsInBackground(Context context) {
        cntx = context;
        boolean isInBackground = true;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    for (String activeProcess : processInfo.pkgList) {
                        if (activeProcess.equals(context.getPackageName())) {
                            isInBackground = false;
                        }
                    }
                }
            }
        } else {
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;      *// this line shows error as "Field requires API level 29 (current min is 16): android.app.TaskInfo#topActivity"*
            if (componentInfo.getPackageName().equals(context.getPackageName())) {
                isInBackground = false;
            }
        }

        return isInBackground;
    }

}

Я получаю эту ошибку, когда я устанавливаю compileSdkVersion в 29.

1 Ответ

0 голосов
/ 21 февраля 2020
taskInfo.get(0).topActivity

этот метод добавлен к уровню 29 API. Поэтому ниже 29 вы не можете использовать это

, замените ваш метод этим

public boolean isAppIsInBackground(Context context) {
    cntx = context;
    boolean isInBackground = true;
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = null;      // this line shows error as "Field requires API level 29 (current min is 16): android.app.TaskInfo#topActivity"*
        componentInfo = taskInfo.get(0).topActivity;
        if (componentInfo.getPackageName().equals(context.getPackageName())) {
            isInBackground = false;
        }
    } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList) {
                    if (activeProcess.equals(context.getPackageName())) {
                        isInBackground = false;
                    }
                }
            }
        }
    }

    return isInBackground;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...