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

所属分类: 软件编程 / Android 阅读数: 59
收藏 0 赞 0 分享

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

//判断当前是不是桌面 
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框架学习之Volley和Glide详解

这篇文章主要给大家介绍了关于Android框架学习之Volley和Glide的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android中Fragment的基本用法示例总结

Fragment是activity的界面中的一部分或一种行为,下面这篇文章主要给大家介绍了关于Android中Fragment的基本用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
收藏 0 赞 0 分享

Android.mk引入第三方jar包和so库文件的方法

这篇文章主要介绍了Android.mk引入第三方jar包和so库文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android仿微信录制小视频

这篇文章主要为大家详细介绍了Android仿微信录制小视频,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

android实现一键锁屏和一键卸载的方法实例

这篇文章主要给大家介绍了关于android如何实现一键锁屏和一键卸载的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
收藏 0 赞 0 分享

Android手势密码--设置和校验功能的实现代码

这篇文章主要介绍了Android手势密码--设置和校验功能的实现代码,非常不错,具有一定的参考校验价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Kotlin学习笔记之const val与val

这篇文章主要给大家介绍了关于Kotlin学习笔记之const val与val的相关资料,并给大家介绍了const val和val区别以及Kotlin中var和val的区别,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android实现调用系统分享功能示例的总结

这篇文章主要介绍了通过Android调用系统分享文本信息、单张图片、多个文件和指定分享到微信、QQ,同时分享图片和文字的功能示例,小编觉得挺不错,一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android自定义view实现输入控件

这篇文章主要为大家详细介绍了Android自定义view实现输入控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码

这篇文章主要介绍了Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码的实例代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多