判断应用是否显示

来源:互联网 发布:js获取当前端口号 编辑:程序博客网 时间:2024/04/28 12:46

public class MyApp extends Application {@Overridepublic void onCreate() {super.onCreate();registerActivityLifecycleCallbacks(new MyLifecycleHandler());}private static int resumed;private static int stopped;public class MyLifecycleHandler implements ActivityLifecycleCallbacks {public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}public void onActivityDestroyed(Activity activity) {}public void onActivityResumed(Activity activity) {++resumed;}public void onActivityPaused(Activity activity) {}public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}public void onActivityStarted(Activity activity) {}public void onActivityStopped(Activity activity) {++stopped;}}public static boolean isApplicationInForeground() {return resumed > stopped;}}

这种方式,在休眠时也会认为app已不可见,这算是一点小遗憾。另外,网上很多方式是使用

/**     * 程序是否在前台运行     * @return     */    public boolean isAppOnForeground(String packageName) {         // 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) {             // 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;     }

这种方式唯一的遗憾是需要特殊权限,

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

所以个人是比较建议第一种方式

0 0