本文共 3061 字,大约阅读时间需要 10 分钟。
有时候需要判断APP是否被切换到后台,然后做相应处理,如显示悬浮窗等。怎么判断呢,有两种方法:
第一种:
/** * 判断当前界面是否是桌面 */ private boolean isHome() { String packageName = getTopApp(this); return getHomes().contains(packageName); } private String getTopApp(Context context) { //android5.0以上只能使用该方式 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); if (m != null) { long now = System.currentTimeMillis(); //获取一小时之内的应用数据 Liststats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000 * 60, now); String topActivity = ""; //取得最近运行的一个app,即当前运行的app if ((stats != null) && (!stats.isEmpty())) { int j = 0; for (int i = 0; i < stats.size(); i++) { if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) { j = i; } } topActivity = stats.get(j).getPackageName(); } return topActivity; } } else { //android5.0以下可以获取所有运行程序的包名 ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List rti = mActivityManager.getRunningTasks(1); return rti.get(0).topActivity.getPackageName(); } return null; } /** * 获得属于桌面的应用的应用包名称 * * @return 返回包含所有包名的字符串列表 */ private List getHomes() { List names = new ArrayList (); PackageManager packageManager = this.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); List resolveInfo = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo ri : resolveInfo) { names.add(ri.activityInfo.packageName); } return names; }
注释应该比较清楚了,当然,如果用这个方法,需要用一个service不断监听,比较浪费性能。
第二种:
在Application初始化时调用registerActivityLifecycleCallbacks监听activity的状态,非常简单吧:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } });
转载地址:http://porki.baihongyu.com/