2012-03-09 3 views
1

Я пытаюсь интегрировать объявления в свое Android-приложение, используя AdWhirl и AdMob.AdMob через AdWhirl: недостаточно места для показа рекламы! Хочет: 480, 75, Имеет: 320, 52

Сайт AdWhirl дал мне следующий код для использования:

AdWhirlLayout adWhirlLayout = (AdWhirlLayout) findViewById(R.id.layoutAdWhirl); 

int diWidth = 320; 
int diHeight = 52; 
int density = (int) getResources().getDisplayMetrics().density; 

int scaledWidth = (int) (diWidth * density); 
int scaledHeight = (int) (diHeight * density); 

adWhirlLayout.setAdWhirlInterface(this); 
adWhirlLayout.setMaxWidth(scaledWidth); 
adWhirlLayout.setMaxHeight(scaledHeight); 

Это прекрасно работает на некоторых из моих эмуляторов, но когда я пытаюсь некоторые меньшие или старых эмуляторов, я получаю следующее сообщение об ошибке в LogCat:

Not enough space to show ad! Wants: 480, 75, Has: 320, 52 

Что я должен делать, если я использую свой код для запроса соответствующего размера объявления, но тогда они не будут показывать, что объявление?

ответ

5

Пара вещей здесь:

  1. Объявление AdMob необходимо 320x50 зависящие от плотности пикселей, чтобы показать объявление. Каждое устройство Android, даже старые маленькие, соответствует этим спецификациям. Маленькие 240x400-пиксельные телефоны имеют низкую плотность, что означает 1px = 0,75dp, и поэтому в портретном режиме показывается 320dp, чтобы показывать объявление. Ваши маленькие эмуляторы, вероятно, находятся в таком состоянии, где они действительно маленькие (с низким числом пикселей), но имеют среднюю или высокую плотность, так что эмулятор не имеет ширины 320dp. Проверьте настройки эмулятора - они, вероятно, не являются репрезентативными для любого устройства.

  2. Приведенный выше код для расчета максимальной ширины и максимальной высоты не требуется. Пока xml дает размер AdWhirlView 320x52dp (или, более предпочтительно, wrap_content), вам не нужно захватывать плотность устройства для вычисления этих значений вручную.

UPDATE:

У меня есть новая теория. Ошибка, которую вы показываете, где AdMob SDK Wants: 480, 75 означает, что вы работаете на устройстве с высокой плотностью, потому что оно умножило 320x50dip на 1,5. Тем не менее, часть кода:

int density = (int) getResources().getDisplayMetrics().density; 

бросает 1,5 до 1, так что максимальная ширина и высота adWhirlLayout были неправильно установлен в 320x52 пикселей. Возможно, это было проблемой для устройств с низкой плотностью, поскольку плотность 0,75 была бы отлита до 0. Возможно, это работало на устройствах средней плотности.

Документация AdWhirl немного устарела, но, вероятно, она должна была указывать float density вместо int density.

+0

Плотность шкалы 1 (устройство mdpi, очень распространенное), поэтому scaledWidth и scaledHeight были 320 x 50. Устройство было 480 пикселей в ширину, и xml был «fill_parent». Комментируя вызовы setMaxWidth() и setMaxHeight(), эта ошибка исчезла ... Я все еще думаю, что их API - это удар ... не совсем мое решение, но я думаю, что ваш вариант №2 должен работать, чтобы исправить это, Примите этот ответ. –

+0

Думаю, я понял это. Вероятно, вы работали на эмуляторе WVGA800 с плотностью 1,5, но вышеприведенный код переместил его в 1, в результате чего представление было слишком маленьким. Я обновил свой ответ. –

+0

@ Эрик: вы говорите правильно. Просто позвольте мне добавить, что очень сильная проблема заключается в том, что при поднятии предупреждения «Недостаточно места для показа рекламы!». запрос считается onReceiveAd успешным даже не отображаемым, и это нарушает цепочку обратной засыпки, обеспечиваемую уровнем посредничества (в данном случае AdWhirl) – Lisitso

Смежные вопросы