我想在一个service里知道当前手机界面上正在显示的是哪一个程序的activity。
我了解到android里有activity栈的概念
是否系统有一个全局的activity栈,能提供当前正在前台显示的activity信息?

解决方案 »

  1.   

     private static MyApplication instance = null;// 单例
        /**
         * 判断应用程序是否在前台 需要权限<uses-permission
         * android:name="android.permission.GET_TASKS"/>
         * 
         * @param activity
         * @return 是否在前台
         */
        public boolean isActive() {
            String packageName = instance.getPackageName();// 获取应用程序包名
            ActivityManager activityManager = (ActivityManager) instance
                    .getSystemService(Context.ACTIVITY_SERVICE);
            List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);
            if (tasksInfo.size() > 0) {
                // 应用程序位于堆栈的顶层
                if (packageName.equals(tasksInfo.get(0).topActivity.getPackageName())) {
                    return true;
                }
            }
            return false;
        }
      

  2.   

    Context context = null; // FIXME: init with your context.
            ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
            for (int i = 0; i < procInfos.size(); i++) {
                if (procInfos.get(i).importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    //the current running process
                    Log.d("FOREGROUND_Application", procInfos.get(i).processName + "is running on the FOREGROUND");
                }
            }