前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android判断当前栈顶Activity的包名代码示例

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

作者头像
砸漏
发布2020-11-03 12:13:30
9480
发布2020-11-03 12:13:30
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

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

代码语言:javascript
复制
//判断当前是不是桌面 
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的包名代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档