首页 > 系统 > Android > 正文

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

2019-10-22 18:15:13
字体:
来源:转载
供稿:网友

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

//判断当前是不是桌面 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开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表