`
onewayonelife
  • 浏览: 259747 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Android 判断程序前后台状态

 
阅读更多

AppStatusService

package org.wp.activity;

import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

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;
	}
}

 

 

 

分享到:
评论

相关推荐

    Android使用ActivityLifecycleCallback判断程序前后台实例

    要判断程序前后台状态,可以关注`onActivityResumed()`和`onActivityPaused()`这两个回调。当`onActivityResumed()`被调用时,表示应用进入了前台;而当`onActivityPaused()`被调用时,表示应用进入后台。结合这两个...

    android判断App前后台切换代码

    总之,判断App的前后台状态可以通过监控Activity的生命周期回调、BroadcastReceiver或者`ActivityManager`来实现。开发者应根据具体需求选择合适的方法,并确保遵循最佳实践,以保持代码的稳定性和兼容性。在项目中...

    用ActivityLifecycleCallbacks 判断前后台运行

    用ActivityLifecycleCallbacks 判断前后台运行Application 提供有一个 registerActivityLifecycleCallbacks() 的方法,需要传入的参数就是这个 ActivityLifecycleCallbacks 接口,系统会在每个 Activity 执行完对应的...

    Android监听前后台切换

    6. **LifecycleObserver**(自Android Architecture Components库):引入Lifecycle库,可以创建一个实现了LifecycleObserver接口的类,并在`onStateChanged()`方法中处理前后台状态的变化。这种方式适用于使用现代...

    Android 判断程序在前台运行还是后台运行

    总结一下,Android应用判断前后台运行的关键在于获取并分析`ActivityManager.RunningAppProcessInfo`中的数据。通过比较进程的包名和重要性,我们可以准确地得知应用当前的状态。这对于实现应用的生命周期管理、电量...

    启动页白屏 如何判断应用前后台切换 透明状态栏 动态切换桌面图标

    "启动页白屏"、"如何判断应用前后台切换"、"透明状态栏"以及"动态切换桌面图标"是开发者经常会遇到的问题,下面将针对这些知识点进行详细讲解。 1. **启动页白屏** 启动页白屏通常是由于应用程序启动时加载资源或...

    Android中应用前后台切换监听的实现详解

    虽然Android的Application类并不直接提供类似iOS中的AppDelegate那样的回调来监听前后台状态变化,但我们可以通过其他方式来达到这个目的。 首先,我们需要了解Android中的Activity生命周期。Activity是应用程序的...

    Android判断当前应用程序处于前台还是后台的两种方法

    本篇将详细介绍两种方法来判断Android应用程序是否在前台或后台。 首先,我们来看第一种方法,通过`RunningTaskInfo`类进行判断。`RunningTaskInfo`提供了当前设备上正在运行的任务的信息。这种方法需要在`...

    Android监听前台和后台切换

    首先,我们需要知道Android应用程序的状态分为两种:前台状态和后台状态。当应用的Activity处于栈顶,或者Service正在运行时,我们称应用处于前台。相反,当应用的所有组件都不处于可见状态,即被系统暂停或者关闭时...

    Android前后台切换时有时需要做些相关的操作这个Demo就是实现了对App前后太切换变换的监听.rar

    在Android开发中,当应用程序在前台与后台之间切换时,可能会需要执行特定的操作,比如保存数据、释放资源或更新UI状态。"Android前后台切换时有时需要做些相关的操作这个Demo就是实现了对App前后太切换变换的监听...

    手势设置 验证app前后台 监控

    GustureLock是一个关于手势锁的Android示例项目,它可能包含了手势设置、验证、反馈以及App前后台状态监控等功能。开发者可以参考该项目的源代码,学习如何实现手势锁组件,并结合自己的应用需求进行定制。 总结,...

    android打开另一App,并监测运行情况

    在Android平台上,开发人员可以实现一个功能,即从自己的应用程序中启动另一个应用,并且能够监控目标应用的运行状态。这通常涉及到Intent的使用,Activity管理,以及系统广播接收器。以下将详细介绍这些知识点: 1...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色...

    gprs android程序

    - 使用GPRS进行网络通信前,需要在AndroidManifest.xml中添加INTERNET权限,如 `&lt;uses-permission android:name="android.permission.INTERNET" /&gt;`。 5. **数据连接管理**: - ConnectivityManager的...

    android退出程序

    ### Android 退出程序知识点解析 #### 一、概述 在Android开发中,有时我们需要实现一个功能,即当用户连续两次点击返回键时,应用程序能够完全退出。这种需求常见于一些较为复杂的多Activity应用中,目的是为了...

    Android通过ConnectivityManager检查网络状态

    4. 提供接口让应用程序获取网络的精确和概要状态。 要使用`ConnectivityManager`检查网络状态,通常需要以下步骤: 1. 创建一个`BroadcastReceiver`子类,重写`onReceive()`方法。在这个方法里,你可以获取到`...

    Android 连连看,项目源码。

    本项目源码提供了一个完整的连连看游戏实例,有助于理解Android应用程序开发过程中的关键技术和设计模式。 首先,我们需要了解Android应用的基本结构。一个Android应用通常由多个组件构成,如Activity(界面)、...

    Pedometer-master_计步器_计步_计步传感器_android开发_androidstudio_

    在Android开发领域,计步器应用是一个常见的健康与健身类应用程序,它利用手机内置的硬件传感器来追踪用户的步数。本项目"计步器(Pedometer-master)"就是一个专注于实现这一功能的开源应用,适合开发者学习如何在...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色...

Global site tag (gtag.js) - Google Analytics