Android判断当前栈顶Activity的包名代码示例

有时候,我们想做一个功能需求的时候,在网上找相关资料,总是找不到想要的,所以我就想到了用博客来记录和整理自己发现的新东西,话不多说,直接撸代码~

//判断当前是不是桌面
public static Boolean isHome(Context context) {
	String topPackageName = getTopActivityName(context);
	//此处做了判断如果得到的是null的话就返回一个true
	return topPackageName == null ? true : getHomesPackageName(context).contains(topPackageName);
}
//得到桌面的包名,包括第三方桌面
private static List<String> getHomesPackageName(Context context) {
	List<String> homePackageNames = new ArrayList<>();
	PackageManager packageManager = context.getPackageManager();
	Intent intent = new Intent(Intent.ACTION_MAIN);
	intent.addCategory(Intent.CATEGORY_HOME);
	List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
	for (ResolveInfo info : resolveInfo) {
		homePackageNames.add(info.activityInfo.packageName);
	}
	return homePackageNames;
}
//得到栈顶Activity的名字,注意此处要进行判断,Android在5.0以后Google把getRunningTasks的方法给屏蔽掉了,所以要分开处理
private static String getTopActivityName(Context context) {
	String topActivityPackageName;
	ActivityManager manager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
	if (Build.VERSION.SDK_iNT >= Build.VERSION_CODES.LOLLIPOP) {
		//此处要判断用户的安全权限有没有打开,如果打开了就进行获取栈顶Activity的名字的方法
		//当然,我们的要求是如果没打开就不获取了,要不然跳转会影响用户的体验
		if (isSecurityPermissionOpen(context)) {
			UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
			long endTime = System.currentTimeMillis();
			long beginTime = endTime - 1000 * 60 * 2;
			UsageStats recentStats = null;
			List<UsageStats> queryUsageStats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, beginTime, endTime);
			if (queryUsageStats == null || queryUsageStats.isEmpty()) {
				return null;
			}
			for (UsageStats usageStats : queryUsageStats) {
				if (recentStats == null || recentStats.getLastTimeUsed() < usageStats.getLastTimeUsed()) {
					recentStats = usageStats;
				}
			}
			topActivityPackageName = recentStats.getPackageName();
			return topActivityPackageName;
		} else {
			return null;
		}
	} else {
		List<ActivityManager.RunningTaskInfo> taskInfos = manager.getRunningTasks(1);
		if (taskInfos.size() > 0)
		      topActivityPackageName = taskInfos.get(0).topActivity.getPackageName(); else
		      return null;
		return topActivityPackageName;
	}
}
//判断用户对应的安全权限有没有打开
private static Boolean isSecurityPermissionOpen(Context context) {
	long endTime = System.currentTimeMillis();
	UsageStatsManager usageStatsManager = (UsageStatsManager) context.getApplicationContext().getSystemService("usagestats");
	List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, 0, endTime);
	if (queryUsageStats == null || queryUsageStats.isEmpty()) {
		return false;
	}
	return true;
}
//此处是跳转安全权限的跳转代码,如果你判断用户没有开启权限的话可以选择跳转,此处标明~~~
//Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
//startActivity(intent);

总结

以上就是本文关于Android判断当前栈顶Activity的包名代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • android获取当前运行Activity名字的方法
  • Android获得当前正在显示的activity类名的方法
  • 获取Activity栈,判断当前Activity位置的方法
(0)

相关推荐

  • android获取当前运行Activity名字的方法

    本文实例讲述了android获取当前运行Activity名字的方法,可以避免即时聊天再出现通知的情况.分享给大家供大家参考.具体方法如下: 最近在做IM时需要知道当前Activity是哪一个Activity.自己整理一下两种方法 第一种:要方便一点(Service中无法使用) 复制代码 代码如下: private String getRunningActivityName() {          String contextString = context.toString();       

  • 获取Activity栈,判断当前Activity位置的方法

    需求 需要在整个app全局能够弹出弹框,接收到广播即进行处理. 但是,BaseActivity派生出N个Activity,BaseActivity中的广播就会执行N次,导致弹框重复添加,所有在广播中判定,只有在栈顶的Activity才能处理广播消息. 实现 获取任务栈 必须添加权限: <!--获取Activity任务栈 权限--> <uses-permission android:name="android.permission.GET_TASKS" /> 具体

  • Android获得当前正在显示的activity类名的方法

    本文实例讲述了Android获得当前正在显示的activity类名的方法.分享给大家供大家参考.具体实现方法如下: 首先需要加一个权限: 复制代码 代码如下: <uses-permission android:name="android.permission.GET_TASKS"/> Java代码如下: 复制代码 代码如下: ActivityManager manager = (ActivityManager)   getSystemService(Context.ACTI

  • Android判断当前栈顶Activity的包名代码示例

    有时候,我们想做一个功能需求的时候,在网上找相关资料,总是找不到想要的,所以我就想到了用博客来记录和整理自己发现的新东西,话不多说,直接撸代码~ //判断当前是不是桌面 public static Boolean isHome(Context context) { String topPackageName = getTopActivityName(context); //此处做了判断如果得到的是null的话就返回一个true return topPackageName == null ? tr

  • Android获取栈顶的应用包名方法

    有时候我们需要判断栈顶的应用是否是我们的应用,于是获取栈顶的应用包名的需求就出现了. 在android5.0之前,系统提供了一套API可以实现这个功能. ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE); String currentClassName = manager.getRunningTasks(1).get(0).topActivi

  • Android中RecyclerView实现Item添加和删除的代码示例

    本文介绍了Android中RecyclerView实现Item添加和删除的代码示例,分享给大家,具体如下: 先上效果图: RecyclerView简介: RecyclerView用以下两种方式简化了数据的展示和处理: 1. 使用LayoutManager来确定每一个item的排列方式. 2. 为增加和删除项目提供默认的动画效果,也可以自定义. RecyclerView项目结构如下: Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器

  • C++/STL实现判断平面内两条线段的位置关系代码示例

    概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.CAD.图形处理等,而两线段交点的求解又是该算法中重要的一环.本文将尽可能用通俗的语言详细的描述一种主流且性能较高的判定算法. 外积,又称叉积,是向量代数(解析几何)中的一个概念.两个二维向量v1(x1,y1)和v2(x2,y2)的外积v1×v2=x1y2-y1x2.如果由v1到v2是顺时针转动,外积为负,反之为正,为0表示二者方向相同(平行).此外,文中涉及行例式和方程组的概念,请参阅线性代数的相关内容. 为方便计算,对坐

  • C++中实现队列类链式存储与栈类链式存储的代码示例

    队列类链式存储 代码: linkqueue.hpp // 队列类 #pragma once #include "linklist.hpp" template <typename T> class LinkQueue { public: LinkQueue(); ~LinkQueue(); public: int clear(); int append(T &t); int retieve(T &t); int header(T &t); int le

  • Android判断用户是否允许了摄像头权限实例代码

    如题,既然是判断用户是否允许了摄像头权限,那么,咱们就忽略是Manifest配置的问题,因为这是开发者的事. 用户在使用APP时,如果首次进入用摄像头的地方,手机会提示是否允许该应用使用摄像头.有些用户小手一抖.或者压根就不想开启摄像头,咔擦,就给你关了,那好了.下回再进入该功能,就会出现APP一片黑,或者崩溃的情况. 作为开发者,正常思路是要提示用户,摄像头权限被你关了,赶紧去手动开启,不然,就别想用该功能了!那,咱们该怎么实现这个思路呢? 一.判断摄像头权限 Android API没提供判断

  • Android应用开发:电话监听和录音代码示例

    在oncreate 中执行: 复制代码 代码如下: public void onCreate() {  super.onCreate();  Log.i("TAG", "服务启动了"); // 对电话的来电状态进行监听  TelephonyManager telManager = (TelephonyManager) this    .getSystemService(Context.TELEPHONY_SERVICE);  // 注册一个监听器对电话状态进行监听 

  • Android应用开发中使用GridView网格布局的代码示例

    基本布局演示 1. 定义包含GridView 的 main.xmk <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fi

  • Android判断App前台运行还是后台运行(运行状态)

    本文通过图文并茂的方式给大家介绍android判断app状态的相关内容,具体详情如下所示: 要了解这块,首先需要明白一些概念,app,process,task 1.process就是进程,是linux的概念. 2.一般一个app拥有一个uid,运行在一个进程里,如果app中给service等定义不同的uid,那Service就运行在另外一个进程里,也就是说uid就相当于进程的id一样,一个uid就代表一个进程:也可以几个app定义一个uid,那他们就运行在一个进程里了. 3.task是andro

  • Android仿微信滑动退出Activity

    效果图: 原理: 原理一句话就能描述清楚.重写Activity的dispatchTouchEvent,滑动的时候拿到Activity栈中栈顶Activity的上一个Acticity的ContentView添加到栈顶Activity的DecorView中,滑动的过程中做视图平移,滑动结束之后把前面拿过来用的ContentView归还给上一个Activity,然后finish当前Activity. ActivityStack: 实现 Application.ActivityLifecycleCall

随机推荐