时间:2021-05-20
有时候,我们想做一个功能需求的时候,在网上找相关资料,总是找不到想要的,所以我就想到了用博客来记录和整理自己发现的新东西,话不多说,直接撸代码~
//判断当前是不是桌面 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的包名代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
有时候我们需要判断栈顶的应用是否是我们的应用,于是获取栈顶的应用包名的需求就出现了。在android5.0之前,系统提供了一套API可以实现这个功能。Activ
本文实例讲述了Android获得当前正在显示的activity类名的方法。分享给大家供大家参考。具体实现方法如下:首先需要加一个权限:复制代码代码如下:Java
android开发中为activity增加左右手势识别,如右滑关闭当前页面。复制代码代码如下:/**for左右手势*1.复制下面的内容到目标Activity*2
Android相关属性的介绍:android:exported=true在Activity中该属性用来标示:当前Activity是否可以被另一个Applicat
本文实例讲述了Android开发实现根据包名判断App运行状态的方法。分享给大家供大家参考,具体如下:前面讲过Android开发判断一个app应用是否在运行的方