Android前后台判断总是前台问题解决办法

来源:互联网 发布:软件测试员要求 编辑:程序博客网 时间:2024/06/06 18:35

也许这不是你程序的问题,是判断应用当前状态的方法有问题

You can detect currently foreground/background application with ActivityManager.getRunningAppProcesses()which returns a list of RunningAppProcessInfo records. To determine if your application is on the foreground checkRunningAppProcessInfo.importance fieldfor equality to RunningAppProcessInfo.IMPORTANCE_FOREGROUND whileRunningAppProcessInfo.processName is equal to your application package name.
Also if you call ActivityManager.getRunningAppProcesses() from your application UI thread it will return importance IMPORTANCE_FOREGROUND for your task no matter whether it is actually in the foreground or not. Call it in thebackground thread(for example via AsyncTask) and it will return correct results.

详细代码:

class ForegroundCheckTask extends AsyncTask<Context, Void, Boolean> {    @Override    protected Boolean doInBackground(Context... params) {        final Context context = params[0].getApplicationContext();        return isAppOnForeground(context);    }    private boolean isAppOnForeground(Context context) {        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();        if (appProcesses == null) {            return false;        }        final String packageName = context.getPackageName();        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {            if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {                return true;            }        }        return false;    }}

原创粉丝点击