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

简介: MainActivity如下: package cc.testbackgroundtofront;import java.util.List;import android.

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>


 

相关文章
|
5月前
|
小程序
小程序常见简单界面功能属性记录
小程序常见简单界面功能属性记录
114 0
|
5月前
|
前端开发
后台添加菜单信息如何在前端循环遍历?
后台添加菜单信息如何在前端循环遍历?
21 0
|
11月前
|
小程序 前端开发 Java
小程序推送功能实现,含小程序和后台代码
小程序推送功能实现,含小程序和后台代码
104 0
|
11月前
|
Android开发 Kotlin
判断App是否处于后台/前台,使用ActivityLifecycleCallbacks稳得很!
RunningAppProcessInfo.IMPORTANCE_FOREGROUND,或者RunningTask来判断过, 但是遇到过偶然失灵或者无法适配现在的android版本。毕竟太老了,现在用点进去经常会有@Deprecated注解,表示废弃了。
|
SQL Python
DjangoAdmin后台的一些设置
DjangoAdmin后台的一些设置
83 0
|
Java API 数据库
给角色分配菜单向后台提交数据的分析 | 学习笔记
快速学习给角色分配菜单向后台提交数据的分析
78 0
给角色分配菜单向后台提交数据的分析 | 学习笔记
|
数据采集 JavaScript 前端开发
前后台分离使用cookie判断用户状态以及传递参数
在之前学习servlet的时候,当时做的小网站需要登陆并且判断信息,当时使用session传值,使用fitter过滤判断,当时感觉哇,session咋这么好用,cookie是啥玩意,还不方便。
134 0
|
Android开发
被后台杀死后,Android应用如何重新走闪屏逻辑
被后台杀死后,Android应用如何重新走闪屏逻辑
442 0
被后台杀死后,Android应用如何重新走闪屏逻辑
CRM WebUI的错误消息是如何从后台服务器取出并绘制到前台的
CRM WebUI的错误消息是如何从后台服务器取出并绘制到前台的
77 0
CRM WebUI的错误消息是如何从后台服务器取出并绘制到前台的
生活号后台操作说明
一、生活号产品介绍 生活号是支付宝为企业、组织和个人提供的直接触达用户的服务平台。商家可以通过生活号对用户进行信息推送、服务输出、交易场景打通和会员关系管理。  二、入驻生活号 步骤1:登录生活号平台,输入支付宝登录账号和密码。
1498 0