Last active
September 3, 2020 14:04
-
-
Save wasnot/aab0fc0c380a5a250aea to your computer and use it in GitHub Desktop.
[Android][Lollipop]UsageStatsManagerでgetRunningAppぽく取得する ref: http://qiita.com/wasnot/items/305850755de860b66fda
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 前面のアプリの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