ActivityManager(三)--判断应用程序从后台回到前台

MainActivity如下:

package cc.testbackgroundtofront;

import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.widget.Toast;
/**
 * Demo描述:
 * 判断应用从后台回到前台
 * 即按下Home键后重新进入到应用
 */
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	@Override
	protected void onResume() {
		super.onResume();

	}

	@Override
	protected void onRestart() {
		super.onRestart();
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
		boolean isCurrentRunningForeground = prefs.getBoolean("isCurrentRunningForeground", false);
		if (!isCurrentRunningForeground) {
			Toast.makeText(MainActivity.this, "从后台回来", Toast.LENGTH_SHORT).show();
		}
	}
	@Override
	protected void onStop() {
		super.onStop();
		try {
			Thread.sleep(1000);
			new Thread(){
				public void run() {
					boolean isCurrentRunningForeground=isRunningForeground();
					SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
					Editor editor=prefs.edit();
					editor.putBoolean("isCurrentRunningForeground", isCurrentRunningForeground);
					editor.commit();
				};
			}.start();
		} catch (Exception e) {

		}
	}

	public boolean isRunningForeground(){
		String packageName=getPackageName(this);
		String topActivityClassName=getTopActivityName(this);
		System.out.println("packageName="+packageName+",topActivityClassName="+topActivityClassName);
		if (packageName!=null&&topActivityClassName!=null&&topActivityClassName.startsWith(packageName)) {
			System.out.println("---> isRunningForeGround");
			return true;
		} else {
			System.out.println("---> isRunningBackGround");
			return false;
		}
	}

	public  String getTopActivityName(Context context){
		String topActivityClassName=null;
		 ActivityManager activityManager =
		(ActivityManager)(context.getSystemService(android.content.Context.ACTIVITY_SERVICE )) ;
		 //android.app.ActivityManager.getRunningTasks(int maxNum)
		 //int maxNum--->The maximum number of entries to return in the list
		 //即最多取得的运行中的任务信息(RunningTaskInfo)数量
	     List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1) ;
	     if(runningTaskInfos != null){
	    	 ComponentName f=runningTaskInfos.get(0).topActivity;
	    	 topActivityClassName=f.getClassName();

	     }
	     //按下Home键盘后 topActivityClassName=com.android.launcher2.Launcher
	     return topActivityClassName;
	}

	public String getPackageName(Context context){
		 String packageName = context.getPackageName();
		 return packageName;
	}

}

 

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="判断应用是否是由后台回到前台"
        android:layout_centerInParent="true"
     />

</RelativeLayout>

 

时间: 2024-09-27 22:38:25

ActivityManager(三)--判断应用程序从后台回到前台的相关文章

Android应用程序转到后台并回到前台判断方法_Android

我们知道,当我们按返回或Home键退出应用程序的界面时,应用程序会在后台被挂起.这么设计的好处是,由于应用被系统缓存在内存中,那么在用户打开启动应用时就可以通过调用缓存,快速启动应用.当然,由于当今内存和处理器能力的限制,系统会自动关闭一些进程. 那么我如何判断这个应用程序在前台还是后台,应用从后台回到前台了? 看到一般都是runningProcess或者runningTasks来判断应用在前台还是后台 事实上,Android在SDK 14的时候提供了一个Callback.ActivityLif

c语言-求教C语言判断素数程序算法,为何j&amp;amp;lt;=sqrt((double)i )??

问题描述 求教C语言判断素数程序算法,为何j<=sqrt((double)i )?? #include #include void fun(int a, int b, int *c) { int i,j,d,y; for (i=3;i<=a/2;i=i+2) { /************found**************/ y=1; for (j=2;j<=sqrt((double)i );j++)//??为何j<=sqrt((double)i )?? if (i%j==0)

iOS 程序在后台收不到推送

问题描述 程序在前台 能收到消息回调 执行了-(void)didReceiveMessage:(EMMessage *)message这个方法程序在后台确不执行这个方法 我知道这里要用本地推送实现 但是不走啊程序杀死的时候 是可以正常接收推送的 解决方案 把这个回调写在rootVC中.解决方案二:请问,我现在证书还有代码都是按照环信的要求做的,但是现在把程序杀死,就是接收不到推送消息啊.解决方案三:http://www.imgeek.org/question/5225    您可以看下这里 @R

android如何判断应用程序是否正真获取了某个权限

问题描述 android如何判断应用程序是否正真获取了某个权限 android如何判断应用程序是否正真获取了某个权限,例如小米手机获取悬浮窗权限,如何判断真的获取好权限,而不是仅仅获取了manifest声明的 解决方案 android获取正在运行的应用程序 解决方案二: http://blog.csdn.net/lan410812571/article/details/41960425 参考. 解决方案三: 是编程还是仅仅是判断?如果是判断,可以用drozer命令获取.

winform-C# Winform项目,如何实现打开的外部视频客户端程序响应后台程序的键盘事件

问题描述 C# Winform项目,如何实现打开的外部视频客户端程序响应后台程序的键盘事件 在C# Winform项目,在form1窗体有一个button按钮. 目前已经可以在button的点击事件中,通过以下代码实现将"CBOX央视影音"在线视频播放的App客户端打开. 代码如下: Process proc = new Process(); proc.StartInfo.FileName = @"C:Program FilesCNTVCBoxCBox.exe";

websphere 用wsadmin怎么判断应用程序的状态是启动还是停止啊

问题描述 websphere用wsadmin怎么判断应用程序的状态是启动还是停止啊 解决方案 解决方案二:http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/rxml_admincontrol.html?resultof=%22%41%64%6d%69%6e%43%6f%6e%74%72%6f%6c%2e%69%6e%76%6f%6b%65%22%20%22

Linux下时间范围判断的程序流程及其C代码实现

一.概述 在实际的软件开发项目中,经常会遇到需要判断时间范围的情况.例如,某软件要在某段时间内执行对过期数据的清理,在其它时间段不执行.为了体现程序的灵活性,一般都是在配置文件中设置时间段的始末值,这样可根据软件的实际安装环境进行配置.本文介绍判断当前时间是否在配置的时间范围内的程序流程,并给出了C代码实现.具体的需求描述如下: 在配置文件中按需配置某一开始时间和结束时间,编写程序判断当前系统时间是否在配置时间的范围之内.配置的时间格式为:HH:MM(小时:分),如08:30表示8点30分. 二

C++程序设计实践学材系列(17)——1.4 能作判断的程序

回到系列文章的目录--[系列文章目录] 回到本章目录--[第1章目录] 1.4 能作判断的程序 有一个令人悲伤的故事. 老婆给当程序猿的老公打电话:"下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个." 可是,当晚,程序猿老公手捧一个包子进了家门-- 老婆怒道:"你怎么就买了一个包子?!" 程序猿老公答曰:"因为看到了卖西瓜的." 老婆的指示是: 买1斤包子; if (有卖西瓜的) 买1个(西瓜); 买1斤包子是必须的,要不要买西瓜,那要看有没

DotNet4应用程序打包工具-&gt;升级版【三】宿主程序分析+全部源码下载

索引 DotNet4应用程序打包工具->升级版[三]宿主程序分析+全部源码下载 DotNet4应用程序打包工具->升级版[二]安装工具分析 DotNet4应用程序打包工具(把DotNet4安装程序打包进你的应用程序:WINAPI开发,无dotNet环境也可顺利执行)[一]整体思路   废话少说 入口函数 入口函数是所有逻辑的集合体 int WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdSho