AppLock を作成していますが、完全に機能しています。UserStat を使用して現在のフォアグラウンド アプリをチェックするサービスがあります。現在、パッケージの変更に基づいてアプリのロックを表示および非表示にしています。ただし、通知が来るたびに、現在のフォアグラウンド アプリの位置が取得され、アプリのロックが非表示になります。パッケージ名の変更により。
現在のフォアグラウンド パッケージを取得するためのコードは次のとおりです。
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static String getCurrentAppPackage(Context context) {
String topPackageName = null;
UsageStatsManager usage = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> stats = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
if (stats != null && stats.size() > 0) {
SortedMap<Long, UsageStats> runningTask = new TreeMap<>();
for (UsageStats usageStats : stats) {
runningTask.put(usageStats.getLastTimeUsed(), usageStats);
}
if (runningTask.isEmpty()) {
return null;
}
topPackageName = runningTask.get(runningTask.lastKey()).getPackageName();
}
if (topPackageName == null) {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
context.startActivity(intent);
}
return topPackageName;
}