我正在开发一个使用getRunningTasks()函数获取顶级活动名称的应用程序。但是在Android L中不推荐使用getRunningTasks()。在Lollipop中有没有其他方法可以获得顶级活动名称(而不是包名)。
答案 0 :(得分:1)
Class<?> currentClassName; // Declare Globally
Activity activity = (Activity) context;//casting context into activity
try
{
currentClassName = Class.forName(activity.getClass().getName()); //getting the current activity's class name from activity object
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
请阅读SO Answer
答案 1 :(得分:1)
我找到了一个解决方案,可以在Lollipop上获取热门活动名称,并在Android L中添加新的UsageStatsManager
。
首先,您需要获得许可
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
用户必须启用此选项。
然后使用此方法queryEvents()
有一个简单的例子。
while (true) {
final long INTERVAL = 1000;
final long end = System.currentTimeMillis();
final long begin = end - INTERVAL;
final UsageEvents usageEvents = manager.queryEvents(begin, end);
while (usageEvents.hasNextEvent()) {
UsageEvents.Event event = new UsageEvents.Event();
usageEvents.getNextEvent(event);
if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
Log.d("event", "timestamp : " + event.getTimeStamp());
Log.d("event", "package name : " + event.getPackageName());
Log.d("event", "class name : " + event.getClassName());
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
当activity
变为前台时,您可以在Logcat中看到它的类名和包名。