您的位置:首页 > 移动开发 > Android开发

Android 监听应用是否进入后台 或者恢复前台

2017-03-27 16:16 435 查看
1、通过RunningTaskInfo类判断(需要额外权限):

/**

     *判断当前应用程序处于前台还是后台

     */

    public static boolean isApplicationBroughtToBackground(final Context context) {

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

        List<RunningTaskInfo> tasks = am.getRunningTasks(1);

        if (!tasks.isEmpty()) {

            ComponentName topActivity = tasks.get(0).topActivity;

            if (!topActivity.getPackageName().equals(context.getPackageName())) {

                return true;

            }

        }

        return false;  

     }

 需要在AndroidMenitfest.xml文件中添加以下权限

<uses-permission Android:name="android.permission.GET_TASKS"
/> 

2.基本思路:让app中所有的activity继承与一个公共的activity(例如:BaseActivity),然后在BaseActivity的onStop()中判断当前程序是否处于后台

/**   

 * 文件名:BaseActivity.Java   

 * 版本号:        

 * 日期:2012-6-20 

 * 创建人:

 * Copyright wadata 版权所有

 * 变更:

 */

 

package com.wadata.mobilefollowup.view.base;

 

import java.util.List;

import android.app.Activity;

import android.app.ActivityManager;

import android.app.ActivityManager.RunningAppProcessInfo;

import android.content.Context;

 

/**

 * 名称:BaseActivity 

 * 描述: 

 * 创建人: 

 * 日期:2012-6-20 下午5:53:35 

 * 变更:

 */

 

public class BaseActivity extends Activity {

        @Override

        protected void onStop() {

                // TODO Auto-generated method stub

                super.onStop();

 

                if (!isAppOnForeground()) {

                        //app 进入后台

                         

                        //全局变量isActive = false 记录当前已经进入后台

                }

        }

 

        @Override

        protected void onResume() {

                // TODO Auto-generated method stub

                super.onResume();

 

                 

                //if (!isActive) {

                        //app 从后台唤醒,进入前台

                         

                        //isActive = true;

                //}

        }

 

        /**

         * 程序是否在前台运行

         * 

         * @return

         */

        public boolean isAppOnForeground() {

                // Returns a list of application processes that are running on the

                // device

                 

                ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);

                String packageName = getApplicationContext().getPackageName();

 

                List<RunningAppProcessInfo> appProcesses = activityManager

                                .getRunningAppProcesses();

                if (appProcesses == null)

                        return false;

 

                for (RunningAppProcessInfo appProcess : appProcesses) {

                        // The name of the process that this object is associated with.

                        if (appProcess.processName.equals(packageName)

                                        && appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {

                                return true;

                        }

                }

 

                return false;

        }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: