Android判断当前栈顶Activity的包名代码示例
有时候,我们想做一个功能需求的时候,在网上找相关资料,总是找不到想要的,所以我就想到了用博客来记录和整理自己发现的新东西,话不多说,直接撸代码~
//判断当前是不是桌面
publicstaticBooleanisHome(Contextcontext){
StringtopPackageName=getTopActivityName(context);
//此处做了判断如果得到的是null的话就返回一个true
returntopPackageName==null?true:getHomesPackageName(context).contains(topPackageName);
}
//得到桌面的包名,包括第三方桌面
privatestaticListgetHomesPackageName(Contextcontext){
ListhomePackageNames=newArrayList<>();
PackageManagerpackageManager=context.getPackageManager();
Intentintent=newIntent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ListresolveInfo=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;
ListqueryUsageStats=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");
ListqueryUsageStats=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的包名代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!