Ответ 1
Насколько я знаю, то, что вы хотите, невозможно. В аналогичном question есть решение для обнаружения системных диалогов, но я не думаю, что он будет работать для вашего наложения (только для текущей активности).
Другой question предполагает, что можно контролировать системные диалоги с помощью ActivityManager, но этот API был устаревшим с LOLIPOP.
По этим причинам я предлагаю вам добавить кнопку паузы на ваш оверлей. Или даже лучше, используйте кнопки notification с кнопками остановки/запуска, чтобы пользователи могли вручную приостановить наложение.
Чтобы определить системные приложения, вам нужно имя пакета, как описано в этом ответе:
public boolean isSystemApp(String packageName) {
try {
// Get packageinfo for target application
PackageInfo targetPkgInfo = mPackageManager.getPackageInfo(
packageName, PackageManager.GET_SIGNATURES);
// Get packageinfo for system package
PackageInfo sys = mPackageManager.getPackageInfo(
"android", PackageManager.GET_SIGNATURES);
// Match both packageinfo for there signatures
return (targetPkgInfo != null && targetPkgInfo.signatures != null && sys.signatures[0]
.equals(targetPkgInfo.signatures[0]));
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}