没有合适的资源?快使用搜索试试~ 我知道了~
首页Android获取栈顶的应用包名方法
资源详情
资源评论
资源推荐

Android获取栈顶的应用包名方法获取栈顶的应用包名方法
下面小编就为大家分享一篇Android获取栈顶的应用包名方法,具有很好的参考价值,希望对大家有所帮助。一
起跟随小编过来看看吧
有时候我们需要判断栈顶的应用是否是我们的应用,于是获取栈顶的应用包名的需求就出现了。
在在android5.0之前,系统提供了一套之前,系统提供了一套API可以实现这个功能。可以实现这个功能。
ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
String currentClassName = manager.getRunningTasks(1).get(0).topActivity.getPackageName();
但是在android5.0之后,这个getRunningTasks()过时了,google做了限制,不让获取第三方的应用任务栈,只能获取自己的
应用和Launcher桌面的包名。
当然天无绝人之路,在android5.0之后,android提供了UsageStatsManager的方式来获取栈顶的应用包名(并非直接获取,
需要处理)。
UsageStatManager是一个使用情况统计管理者,通过它可以获取应用的使用情况,通过List集合来记录APP的使用情况,通
过UsageStats对象可以获取包名,最后的在前台的时间,在前台的次数等等。
他需要权限:他需要权限:
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
这个权限是需要系统授权的,系统不授权获取不到数据。
下面看下实现案例:下面看下实现案例:
ForegroundAppUtils:将获取前台包名等方法封装成一个工具类
public class ForegroundAppUtil {
private static final long END_TIME = System.currentTimeMillis();
private static final long TIME_INTERVAL = 7 * 24 * 60 * 60 * 1000L;
private static final long START_TIME = END_TIME - TIME_INTERVAL;
/**
* 获取栈顶的应用包名
*/
public static String getForegroundActivityName(Context context) {
String currentClassName = "";
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
ActivityManager manager = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
currentClassName = manager.getRunningTasks(1).get(0).topActivity.getPackageName();
} else {
UsageStats initStat = getForegroundUsageStats(context, START_TIME, END_TIME);
if (initStat != null) {
currentClassName = initStat.getPackageName();
}
}
return currentClassName;
}
/**
* 判断当前应用是否在前台
*/
public static boolean isForegroundApp(Context context) {
return TextUtils.equals(getForegroundActivityName(context), context.getPackageName());
}
/**
* 获取时间段内,
*/
public static long getTotleForegroundTime(Context context) {
UsageStats usageStats = getCurrentUsageStats(context, START_TIME, END_TIME);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return usageStats != null ? usageStats.getTotalTimeInForeground() : 0;
}
return 0;
}
/**
* 获取记录前台应用的UsageStats对象
*/
private static UsageStats getForegroundUsageStats(Context context, long startTime, long endTime) {
UsageStats usageStatsResult = null;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
List<UsageStats> usageStatses = getUsageStatsList(context, startTime, endTime);
if (usageStatses == null || usageStatses.isEmpty()) return null;


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0