Admob на Android - область строки состояния не покрывается при возобновлении активности - PullRequest
4 голосов
/ 11 мая 2011

Я испытываю очень неприятную ошибку, пытаясь реализовать Admob в своем приложении.Я думал, что проблема в моем коде, но после некоторого исследования я обнаружил, что он присутствует и в примере Android-Banner-Essentials (доступен для скачивания здесь ).Интересно, сталкивался ли кто-нибудь с этой проблемой или, может быть, знает, как с ней справиться.

В основном, когда у приложения отключены статус и строка заголовка, оно должно использовать полноэкранный режим.Пример Banner Essentials отображает только баннер Admob в самой верхней части доступной области.Я скачал пример, изменил только две вещи:

  • добавил мой идентификатор издателя для правильной компиляции и получения любых объявлений;)
  • добавил один параметр в манифест действия, чтобы отключить заголовок и строку состояния: android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"

Скомпилированный бинарный файл, независимо от того, на каком устройстве он запущен (пробовал Nexus One, G1, Desire, разные версии Android), затрагивается та же проблема:

  • Когда рекламный баннер отображается, нажмите Домой,
  • После возврата на главный экран нажмите и удерживайте Домой, чтобы увидеть недавно запущенные приложения,
  • Выберите обратно приложение Banner Essentials.

Мои тесты показали, что при 50% вероятности воспроизведения баннер Admob не возвращается на свою позицию - в самую верхнюю часть экрана.Чтобы лучше понять, что я имею в виду, я подготовил три снимка экрана:

http://img841.imageshack.us/g/correctz.png/

Важные замечания:

  • Когда приложение возобновляется в обычном режиме, баннер отображается чуть ниже статусаи сдвигается вверх до тех пор, пока не выровняется по верхней границе экрана,
  • при появлении ошибки баннер не перемещается вообще,
  • Я не смог воспроизвести проблему с любым другим прерыванием (нажатие Back, кнопка питания),
  • Я думаю, что это может быть как-то связано с получением / потерей фокуса (см. скриншоты).

Мое приложение немного сложнее, чем Banner Essentials, поэтому яНачал с поиска проблемы в моем коде, но безуспешно, поэтому попытался максимально упростить ситуацию, и вот результаты.

Кто-нибудь знает, что может быть причиной проблемы?Может быть, некоторые дополнительные флаги или свойства должны быть установлены для обработки этого поведения?

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

На это ссылаются как на ошибку Android. Нет решения, есть обходной путь. Вы должны переустановить Window Fullscreen примерно через 1 секунду после onResume (чтобы дождаться, пока строка состояния не закончит свою причудливую анимацию скольжения ...), что заставит его пересчитать / рассчитать весь макет, «решая» проблему (с помощью быстрый прыжок к правильному положиину).

public void onResume()
{

  ...

    handler.postDelayed(new Runnable() {
        public void run() {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
    }, 1500); 

  ...

}

Это не хорошо. Но это все еще лучший доступный. Подробнее здесь .

0 голосов
/ 21 декабря 2011

В моем случае это поведение было вызвано возобновлением с экрана блокировки.Понятия не имею, но после добавления пустой перегруженной функции это было исправлено (но я проверял это только на своем HTC Wilfire).Это может быть другая ошибка, ты.

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    /* Workaround a probable Android bug with fullscreen activities:
     * on resume status bar hides and black margin stays, 
     * reproducible half of the time when coming back from lock screen 
     * (tested on HTC Wildfire)
     * No idea why but this empty overload method fixed it.
     */
}
...