在Android开发中,获取当前运行的Activity
(特别是baseActivity
)通常用于调试或特定的应用逻辑需求。以下是一些基础概念和相关方法:
Activity
,即启动其他所有Activity
的那个。ActivityManager
你可以使用ActivityManager
来获取当前任务栈的信息,进而找到baseActivity
。
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
public String getBaseActivity(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).baseActivity;
return componentInfo.getClassName();
}
注意:从Android 5.0(API level 21)开始,getRunningTasks()
方法已被弃用,因为它不再提供准确的任务信息。
UsageStatsManager
对于Android 5.0及以上版本,可以使用UsageStatsManager
来获取更详细的任务使用情况。
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
public String getBaseActivityUsingUsageStats(Context context) {
long time = System.currentTimeMillis();
UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
List<UsageStats> stats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time);
if (stats != null) {
SortedMap<Long, UsageStats> sortedMap = new TreeMap<>();
for (UsageStats usageStats : stats) {
sortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (!sortedMap.isEmpty()) {
return sortedMap.get(sortedMap.lastKey()).getPackageName();
}
}
return null;
}
Activity
下有效,可以通过检测baseActivity
来启用或禁用这些功能。GET_TASKS
(已被弃用)或PACKAGE_USAGE_STATS
。如果在尝试获取baseActivity
时遇到问题,比如返回为空或不准确,可以检查以下几点:
AndroidManifest.xml
中正确声明所需权限。通过上述方法和注意事项,你应该能够在大多数情况下成功获取当前运行的baseActivity
。
领取专属 10元无门槛券
手把手带您无忧上云