获取Android L中的热门活动名称

时间:2015-08-13 06:28:51

标签: android android-activity android-5.0-lollipop

我正在开发一个使用getRunningTasks()函数获取顶级活动名称的应用程序。但是在Android L中不推荐使用getRunningTasks()。在Lollipop中有没有其他方法可以获得顶级活动名称(而不是包名)。

2 个答案:

答案 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中看到它的类名和包名。