Задача: я должен отслеживать видимость всего приложения Android и генерировать события, когда он переходит на задний план или на передний план. Первая часть задачи завершена: у меня есть специальный глобальный счетчик, который я увеличиваю в Activity onStart() и декремент в действии onStop(), когда этот счетчик падает до нуля, тогда мое приложение перешло на задний план.Как отслеживать активность visibilty с учетом диалогов и системных окон?
Вторая часть задачи - обман. Я знаю около strange behavior of onResume() и совет по использованию onWindowFocusChanged (boolean). Я посмотрел в документации onWindowFocusChanged (булевой) и заметил такую вещь:
Как правило, однако, возобновилась деятельность будет иметь окно фокус ... если он не отображается другой диалоги или всплывающие окна которые принимают фокус ввода , и в этом случае сама деятельность не будет иметь фокуса , когда у него есть другие окна. Аналогично, система может отображать окна системного уровня (например, панель уведомлений панели состояния или системное предупреждение ), которое временно примет фокус ввода окна без , приостанавливая работу переднего плана.
Есть ли способ проверить: чье окно отображается над возобновленной деятельностью из моего приложения? Это мой диалог или keyguard? Есть ли способ поймать событие: все, кроме моих окон над возобновленными действиями, удаляются?
Техническое задание копируется с iOS. В приложении iOS вы можете легко отслеживать глобальную видимость всего приложения. В Android у приложения нет событий, «приложение действительно вводило фон/передний план», поэтому я должен имитировать их. Приложение действительно вводило фон, когда ни одна из приложений не находится в видимом состоянии (http://developer.android.com/reference/android/app/Activity.html). Приложение было введено на переднем плане, когда оно было в фоновом режиме, и затем любая активность переходит в видимое состояние. – QuickNick
Я не могу представить, почему это проблема для вас. Почему вы не можете жить с собственным понятием вашего Android-сообщества, когда на переднем плане или в фоновом режиме происходит действие? –
Это техническая задача: я должен отчитываться о событиях отслеживания аналитики. «Приложение действительно появилось на переднем плане/фоне». В моем вопросе я объяснил, почему я не могу использовать только onStart()/onResume()/onPause()/onStop(). – QuickNick