2017-02-17 13 views
0

Когда я показываю межстраничное объявление Admob, оно отображается нормально, и я зарегистрировал прослушиватель, чтобы поймать событие onAdClosed, но проблема в том, что я ничего не могу сделать из этого события, которое взаимодействует с моим пользовательским интерфейсом, потому что межстраничное закрыло все это.Admob Interstitial закрывает существующую активность

Я создаю интерстициальные так:

storyAd = new InterstitialAd(this); 
    storyAd.setAdUnitId("ca-app-pub-xxxxxxxxxxxxxxxx"); 
    storyAd.setAdListener(new AdListener() { 
     @Override 
     public void onAdClosed() { 
      super.onAdClosed(); 
      storyAd.loadAd(buildAdRequest()); 
      if (prevMusicPlaying) { 
       toggleAudio(); 
      } 
      loadNextPage(); 
     } 
    }); 
    storyAd.loadAd(buildAdRequest()); 

У меня есть это в мой манифест тоже:

<activity android:name="com.google.android.gms.ads.AdActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
     android:theme="@android:style/Theme.Translucent" /> 

The loadNextPage) сбой вызова (потому что он пытается создать новый фрагмент и добавьте его в свою активность, чего он не может сделать, потому что активность была приостановлена ​​межстраничным. Так что я просто получаю это исключение:

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
         at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1328) 
         at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1346) 
         at android.app.FragmentManagerImpl.popBackStack(FragmentManager.java:488) 

Как я могу сделать так, что InterstitialAd не мешает каким-либо образом с существующим интерфейсом. Потребовалось очень много времени, чтобы заставить существующий пользовательский интерфейс работать с различными процессами/фрагментами gotchas.

+0

Что вы хотите заархивировать? Вы прочитали описание 'onAdClosed - Вызывается, когда пользователь вот-вот вернется в приложение после нажатия на объявление.' – Divers

+0

@Divers. То, что я пытаюсь достичь, - это возможность добавить межстраничный текст, не испортив существующего чрезвычайно деликатной системы фрагментов, которую у меня уже есть. Поэтому, в идеале, я хочу показать интерстициальный, не приостанавливая или закрывая деятельность и не уничтожая любые уже существующие фрагменты. Если я не могу этого сделать, мне по крайней мере нужен обратный вызов, который будет происходить после закрытия объявления, но пользователь уже вернулся в приложение, поэтому я могу обновить интерфейс без сбоя. – user3690202

ответ

0

Итак, ответ менее идеален, но он работает.

Вы обновляете свою модель данных в onAdCllosed(), но не имеете ничего общего с пользовательским интерфейсом. Установите флаг, чтобы указать, что объявление закрыто или что вам нужно делать.

Затем в onResume() на главной операции вы обновляете пользовательский интерфейс. Вы можете проверить флаг из onAdClosed() или любого другого, а затем обновить графический интерфейс, чтобы отобразить новое состояние.

0

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

Это плохая практика, так как вы не хотите, чтобы ваше приложение чтобы полагаться на обратные вызовы объявлений. может быть сценариями, которые объявление не может показать на всех

Что вам нужно сделать, это позвонить

loadNextPage(); 

, прежде чем показать объявление. когда объявление покажет, что он просто перейдет на экран приложения таким образом, если есть объявление, которое он просто примет, иначе это не повлияет на приложение.