Android判断当前栈顶Activity的包名代码示例
有时候,我们想做一个功能需求的时候,在网上找相关资料,总是找不到想要的,所以我就想到了用博客来记录和整理自己发现的新东西,话不多说,直接撸代码~
//判断当前是不是桌面 publicstaticBooleanisHome(Contextcontext){ StringtopPackageName=getTopActivityName(context); //此处做了判断如果得到的是null的话就返回一个true returntopPackageName==null?true:getHomesPackageName(context).contains(topPackageName); } //得到桌面的包名,包括第三方桌面 privatestaticListgetHomesPackageName(Contextcontext){ List homePackageNames=newArrayList<>(); PackageManagerpackageManager=context.getPackageManager(); Intentintent=newIntent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); List resolveInfo=packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY); for(ResolveInfoinfo:resolveInfo){ homePackageNames.add(info.activityInfo.packageName); } returnhomePackageNames; } //得到栈顶Activity的名字,注意此处要进行判断,Android在5.0以后Google把getRunningTasks的方法给屏蔽掉了,所以要分开处理 privatestaticStringgetTopActivityName(Contextcontext){ StringtopActivityPackageName; ActivityManagermanager=(ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE); if(Build.VERSION.SDK_iNT>=Build.VERSION_CODES.LOLLIPOP){ //此处要判断用户的安全权限有没有打开,如果打开了就进行获取栈顶Activity的名字的方法 //当然,我们的要求是如果没打开就不获取了,要不然跳转会影响用户的体验 if(isSecurityPermissionOpen(context)){ UsageStatsManagermUsageStatsManager=(UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE); longendTime=System.currentTimeMillis(); longbeginTime=endTime-1000*60*2; UsageStatsrecentStats=null; List queryUsageStats=mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,beginTime,endTime); if(queryUsageStats==null||queryUsageStats.isEmpty()){ returnnull; } for(UsageStatsusageStats:queryUsageStats){ if(recentStats==null||recentStats.getLastTimeUsed() taskInfos=manager.getRunningTasks(1); if(taskInfos.size()>0) topActivityPackageName=taskInfos.get(0).topActivity.getPackageName();else returnnull; returntopActivityPackageName; } } //判断用户对应的安全权限有没有打开 privatestaticBooleanisSecurityPermissionOpen(Contextcontext){ longendTime=System.currentTimeMillis(); UsageStatsManagerusageStatsManager=(UsageStatsManager)context.getApplicationContext().getSystemService("usagestats"); List queryUsageStats=usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,0,endTime); if(queryUsageStats==null||queryUsageStats.isEmpty()){ returnfalse; } returntrue; } //此处是跳转安全权限的跳转代码,如果你判断用户没有开启权限的话可以选择跳转,此处标明~~~ //Intentintent=newIntent(Settings.ACTION_USAGE_ACCESS_SETTINGS); //startActivity(intent);
总结
以上就是本文关于Android判断当前栈顶Activity的包名代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!