Nano Hash - криптовалюты, майнинг, программирование

Как сделать рекламные баннеры (admob) общими для всех моих действий

У меня есть около трех действий, и все эти три действия имеют баннерную рекламу внизу, которая устанавливается кодом в методе OnCreate() трех действий.

И по какой-то причине мне нужно завершить каждое действие при переходе от одного действия к другому и startActivity() для возврата к первому действию.

Я хотел знать, как мне сделать только один рекламный баннер для всех этих трех действий вместо того, чтобы вызывать их по отдельности из разных onCreate, потому что я сомневаюсь, что при переходе действий я обновляю рекламу (часто тихо), что не очень хорошо практика для ваших кликов.

Должен ли я объявить его в статическом классе, чтобы его можно было вызывать из любого действия, и там был бы только один экземпляр (поэтому без обновления из-за создания действия)

Предложения приветствуются.


  • Не зная, что делает каждое действие или почему вы должны завершить их при переходе от одного к другому, это может быть неактуально .... Думали ли вы о том, чтобы просто иметь одно действие с FrameLayout и (ниже) рекламный баннер Посмотреть? Вместо того, чтобы переходить от одного действия к другому, просто создайте представление каждого действия и поместите его в FrameLayout. Вид рекламного баннера останется неизменным на всем протяжении. В качестве альтернативы, в зависимости от версии Android, используйте фрагменты вместо действий. Просто идея. 09.03.2012
  • Хотя вы можете установить свой рекламный баннер, общий для всех действий, новый запрос рекламы отправляется в admob при появлении каждого действия. если пользователь переключает действие очень часто, вы можете получить очень низкую скорость заполнения. Вместо этого используйте одно действие + несколько фрагментов, см. здесь 20.05.2015

Ответы:


1

Вы знаете о внедрении ViewStub?

Для вашей проблемы ViewStub используется для размещения объявлений AdMob в Footer. Вам просто нужно создать макет для этого нижнего колонтитула, а затем включить этот макет в свои XML-макеты (макеты действий) с помощью примера ViewStub.

Вот пример для реализации ViewStub, да, для Строка заголовка, но вы можете взять из нее концепцию.

Теперь, чтобы оптимизировать решение (код), вы можете создать класс Abstract и класс extends Activity и включить код рекламы AdMob в этот класс.

Например:

public abstract class BaseActivity extends Activity
{
   /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

        public void setFooterAds()
        {
              // Make ViewStub visible
              // include your Ads code
        }
}

Теперь вам просто нужно расширить этот класс BaseActivity в своих классах Activity и вызвать метод setFooterAds() для отображения рекламы AdMob.

09.03.2012
  • Я бы внедрил его как можно скорее, чтобы проверить, как он работает, я надеюсь, что макет не будет создан снова, так как я не хочу, чтобы мои объявления обновлялись, вернутся после первой попытки. Спасибо 13.03.2012
  • Привет, Пареш, пожалуйста, взгляните на мою проблему, у меня также есть проблема с добавлением рекламы в мое приложение.....pastebin. com/LpnLuRDT 27.02.2014

  • 2

    Вы можете поместить такой код в свое основное действие, чтобы рекламный баннер отображался во всех трех действиях.

    import com.google.ads.*; 
    
    public class testActivity extends Activity { 
    private static final String MY_AD_UNIT_ID = "yourId"; 
    private AdView adView; 
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        super.loadUrl("file:///android_asset/www/index.html");          
        // Create the adView 
        adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID); 
        LinearLayout layout = super.root; // this is the only change 
        layout.addView(adView); 
        adView.loadAd(new AdRequest());
    

    XML-файл:

    <com.admob.android.ads.AdView
          android:id="@+id/ad"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          xmlns:backgroundColor="#000000"
          xmlns:primaryTextColor="#ffffff"
          xmlns:secondaryTextColor="#cccccc"
    
    09.03.2012

    3

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

    28.01.2016

    4

    Есть простой способ сделать это!

    Курил «люмпию», чтобы узнать, что что-то вроде «ViewStub» существует, это интересно и спасибо за подсказку @Paresh data, но пока слишком сложно для этой цели. Существует более простой способ использовать баннер для всех ваших действий, и он использует SINGLETON, в котором хранится информация «AdView» и «AdRequest» для всех ваших приложений. После инициализации модуля AdMob и баннеров с вашим соответствующим идентификатором вы можете использовать его в любом месте своей программы, просто добавляя AdView в макет каждого действия, не забывая удалять его из макета после завершения каждого действия.

    1. Добавьте в свой проект одноэлементный класс для вашего конкретного модуля (в данном случае баннеры):

    открытый класс SingletonAdMobBanner

    private static SingletonAdMobBanner instance;
    private AdView adView;
    private AdRequest adRequest;
    
    public synchronized static SingletonAdMobBanner getInstance() {
        if (instance == null) instance = new SingletonAdMobBanner();
        return instance;
    }
    
    AdView getAdView() {return adView;}
    AdRequest getAdRequest() {return adRequest;}
    void setAdView(AdView adView) {this.adView = adView;}
    void setAdRequest(AdRequest adRequest) {this.adRequest = adRequest;}
    
    1. Добавьте следующее в MainActivity:

      // Initialize AdMob
      try {
          MobileAds.getVersionString();
      } catch (Exception ignored) {
          MobileAds.initialize(getApplicationContext(), new OnInitializationCompleteListener() {
              @Override
              public void onInitializationComplete(InitializationStatus initializationStatus) {
              }
          });
      }
      
      // Init Banner module
      SingletonAdMobBanner sam = SingletonAdMobBanner.getInstance();
      sam.setAdView(new AdView(getApplicationContext()));
      AdView adView = sam.getAdView();
      adView.setAdUnitId("your module id");
      adView.setAdSize(AdSize.SMART_BANNER);
      sam.setAdRequest(new AdRequest.Builder().build());
      
    2. Создайте общедоступный класс или метод для загрузки баннера в определенном макете, который вы разработали для отображения баннера в каждом из действий. Вот пример:

      public static void adLoadBanner (Activity activity) {
          SingletonAdMobBanner sam = SingletonAdMobBanner.getInstance ();
          if (sam.getAdView ()! = null && sam.getAdRequest ()! = null) {
              LinearLayout container = activity.findViewById (R.id.ad_view_container);
              container.addView (sam.getAdView ());
              sam.getAdView (). loadAd (sam.getAdRequest ());
          }
      }
      

    НЕ ЗАБУДЬТЕ УДАЛИТЬ БАННЕР ИЗ МАКЕТА ПЕРЕД ПРОЖИВАНИЕМ СВОЕЙ АКТИВНОСТИ в onDestroy:

        // Remove Ad from this activity
        LinearLayout container = findViewById(R.id.ad_view_container);
        container.removeAllViews();
    
    12.03.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..