Skip to content

Instantly share code, notes, and snippets.

@wasnot
Last active September 3, 2020 14:04
Show Gist options
  • Save wasnot/aab0fc0c380a5a250aea to your computer and use it in GitHub Desktop.
Save wasnot/aab0fc0c380a5a250aea to your computer and use it in GitHub Desktop.
[Android][Lollipop]UsageStatsManagerでgetRunningAppぽく取得する ref: http://qiita.com/wasnot/items/305850755de860b66fda
// 前面のアプリのComponentNameだけ取得しています。
// Taskと違ってあまり情報がありませんが。。
public static List<ComponentName> getForegroundAppList(Context context, int size) {
List<ComponentName> nameList = new ArrayList<ComponentName>();
// どこかでpermissionを確認します。
if (!checkPermission(context))
return nameList;
long time = System.currentTimeMillis();
UsageStatsManager usm = (UsageStatsManager) context.getSystemService("usagestats");
long interval = 10 * 1000;
do {
UsageEvents events = usm.queryEvents(time - interval, time);
while (events.hasNextEvent()) {
UsageEvents.Event event = new UsageEvents.Event();
if (events.getNextEvent(event)) {
// eventTypeがMOVE_TO_FOREGROUNDのものだけ取ったらgetRunningTasksっぽかったのでフィルタしています。
// 古い順に取得されるので先頭から追加して新しい順に直しています。
if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
// 使いやすいようにcomponentNameに変えています。
String packageName = event.getPackageName();
ComponentName name = new ComponentName(packageName, event.getClassName());
// リストにの先頭に追加する
nameList.add(0, name);
}
}
}
interval *= 10;
}
// 指定した数以上、foregroundのイベントが取得できるまで続けてます。
// 無限ループになりそうなので10万秒くらいを上限にしています。これでも大きすぎる気がします。
while (nameList.size() < size || interval > 100000 * 1000);
return nameList;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment