获取正在运行的应用、当前应用正在运行的activity

来源:互联网 发布:java语言程序设计 下载 编辑:程序博客网 时间:2024/06/15 23:21

  • getForegroundApp - returns the foreground application.
  • getActivityForApp - returns the activity of the found app.
  • isStillActive - determines if a earlier found app is still the active app.
  • isRunningService - a helper function for getForegroundApp

this hopefully answers this issue in all extend (:

private RunningAppProcessInfo getForegroundApp() {    RunningAppProcessInfo result=null, info=null;    if(mActivityManager==null)        mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);    List <RunningAppProcessInfo> l = mActivityManager.getRunningAppProcesses();    Iterator <RunningAppProcessInfo> i = l.iterator();    while(i.hasNext()){        info = i.next();        if(info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND                && !isRunningService(info.processName)){            result=info;            break;        }    }    return result;}private ComponentName getActivityForApp(RunningAppProcessInfo target){    ComponentName result=null;    ActivityManager.RunningTaskInfo info;    if(target==null)        return null;    if(mActivityManager==null)        mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);    List <ActivityManager.RunningTaskInfo> l = mActivityManager.getRunningTasks(9999);    Iterator <ActivityManager.RunningTaskInfo> i = l.iterator();    while(i.hasNext()){        info=i.next();        if(info.baseActivity.getPackageName().equals(target.processName)){            result=info.topActivity;            break;        }    }    return result;}private boolean isStillActive(RunningAppProcessInfo process, ComponentName activity){    // activity can be null in cases, where one app starts another. for example, astro    // starting rock player when a move file was clicked. we dont have an activity then,    // but the package exits as soon as back is hit. so we can ignore the activity    // in this case    if(process==null)        return false;    RunningAppProcessInfo currentFg=getForegroundApp();    ComponentName currentActivity=getActivityForApp(currentFg);    if(currentFg!=null && currentFg.processName.equals(process.processName) &&            (activity==null || currentActivity.compareTo(activity)==0))        return true;    Slog.i(TAG, "isStillActive returns false - CallerProcess: " + process.processName + " CurrentProcess: "            + (currentFg==null ? "null" : currentFg.processName) + " CallerActivity:" + (activity==null ? "null" : activity.toString())            + " CurrentActivity: " + (currentActivity==null ? "null" : currentActivity.toString()));    return false;}private boolean isRunningService(String processname){    if(processname==null || processname.isEmpty())        return false;    RunningServiceInfo service;    if(mActivityManager==null)        mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);    List <RunningServiceInfo> l = mActivityManager.getRunningServices(9999);    Iterator <RunningServiceInfo> i = l.iterator();    while(i.hasNext()){        service = i.next();        if(service.process.equals(processname))            return true;    }    return false;}
原创粉丝点击