Android判断程序前后台状态

public class AppStatusService extends Service {
    private static final String TAG = "AppStatusService";
    private ActivityManager activityManager;
    private String packageName; 

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    } 

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        packageName = this.getPackageName();
        new Thread() {
            public void run() {
                try {
                    while (true) {
                        Thread.sleep(1000);
                        if (isAppOnForeground()) {
                            Log.i(TAG, "true");
                        } else {
                            Log.i(TAG, "false");
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
        return super.onStartCommand(intent, flags, startId);
    } 

    private boolean isAppOnForeground() {
        // Returns a list of application processes that are running on the device
        List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        if (appProcesses == null) return false;
        for (RunningAppProcessInfo appProcess : appProcesses) {
            // importance:
            // The relative importance level that the system places
            // on this process.
            // May be one of IMPORTANCE_FOREGROUND, IMPORTANCE_VISIBLE,
            // IMPORTANCE_SERVICE, IMPORTANCE_BACKGROUND, or IMPORTANCE_EMPTY.
            // These constants are numbered so that "more important" values are
            // always smaller than "less important" values.
            // processName:
            // 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;
    }
} 

时间: 2024-11-01 20:56:19

Android判断程序前后台状态的相关文章

android判断app前后台状态

项目中需要在应用从后台切换到前台时做操作,自己实现了功能,但对这块的机制不太了解,So.找了相关的资料来学习总结下. !!! 部分资料来源https://github.com/wenmingvs/AndroidProcess !!!!!!整理了半天,跟程序抓了不少图来解释,尼玛发了以后图全没了,格式也乱,补了几张凑合看吧.   要了解这块,首先需要明白一些概念,app,process,task 1.process就是进程,是linux的概念. 2.一般一个app拥有一个uid,运行在一个进程里,

Android - 判断SIM卡状态

Android判断SIM卡状态, 是否插入SIM卡. 例如: 根据SIM判断优先使用的网络类型. SIM卡状态 /** * 判断是否包含SIM卡 * * @return 状态 */ public static boolean hasSimCard() { Context context = App.getAppContext(); TelephonyManager telMgr = (TelephonyManager) context.getSystemService(Context.TELEP

Android实现程序前后台切换效果

转载自:http://www.cnblogs.com/hanyonglu/archive/2012/04/15/2450551.html 本文演示如何在Android中实现程序前后台切换效果. 在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识. 我们都知道,一个Activity 可以启动另一个Activity,即使这个Activity是定义在别一个应用程序里的,比如说,想要给用户展示一个地图的信息,现在已经有一个Activity可以做这件事情,那么现在你的A

Android 判断程序在手机中是否是活动状态或者正在运行状态

沈阳斌子在今天项目需求上碰到个这样的问题,在Service中需要判断当前的程序是否是活动状态,换句话说也就是说后台跑的服务中有业务需求检测当前程序是否是该服务的程序 这样好让点击推送通知时跳转到不同的页面进行不同的操作.下面就粘贴出我封装了一下的方法和大家共享. /** * * @Description : 这个包名的程序是否在运行 * @Method_Name : isRunningApp * @param context 上下文 * @param packageName 判断程序的包名 *

Android判断网络连接状态

需要相关权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.INTERNET"/

android判断当前网络状态及跳转到设置界面

今天,想做这个跳转到网络设置界面, 刚开始用 intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 不料老是出现settings.WirelessSettings找不到(就是没法提示出来,显示红色底纹),我后来查了下资料,结果发现跟版本有关,我的是安卓4.3的,所以需要用                         intent = new Intent(android.provider.Settings.ACTION_WIRELES

android 判断sd的状态,所有文件,剩余空间的大小

public class MainActivity extends AppCompatActivity { String TAG = MainActivity.class.getCanonicalName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Strin

android判断手机SIM状态

public String readSIMCard() { TelephonyManager tm = (TelephonyManager)this.getSystemService(TELEPHONY_SERVICE);//取得相关系统服务 StringBuffer sb = new StringBuffer(); switch(tm.getSimState()){ //getSimState()取得sim的状态 有下面6中状态 case TelephonyManager.SIM_STATE_

android判断网络连接状态、联网类型、运营商

/** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { String netType = ""; ConnectivityManager connectionManager = (ConnectivityManager) mContext .getSystemService(Context.CONNECTIVITY_SERVICE); Networ