【问题标题】:How to show interstitial Ad before launching new activity after clicking a menu button?单击菜单按钮后如何在启动新活动之前显示插页式广告?
【发布时间】:2017-07-01 10:32:58
【问题描述】:

我使用选项菜单按钮转到第二个活动。当用户在启动第二个活动后单击该菜单按钮插页式广告时。 但我想在启动第二个活动之前显示插页式广告,当用户点击插页式广告的关闭按钮时,应该启动第二个活动。

我正在使用下面的代码来展示插页式广告。

case R.id.button_id:
   startActivity(new Intent(this, secondactivity.class ));               

                    interstitial = new InterstitialAd(getApplicationContext());
                    interstitial.setAdUnitId(getString(R.string.admob_interstetial_ad));
                    AdRequest adRequest9 = new AdRequest.Builder()
                            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)


                            .build();
                    interstitial.loadAd(adRequest9);
                    interstitial.setAdListener(new AdListener() {
                        public void onAdLoaded() {
                            if (interstitial.isLoaded()) {
                                interstitial.show();
                            }
                        }
                    });


                    return true;

【问题讨论】:

    标签: android admob interstitial


    【解决方案1】:

    @user8240773 建议的答案是正确的,但有一种更有效的方法来处理您的问题。这是我的代码:

    // Has the interstitial loaded successfully?
    // If it has loaded, perform these actions
    if(mInterstitialAd.isLoaded()) {
        // Step 1: Display the interstitial
        mInterstitialAd.show();
        // Step 2: Attach an AdListener
        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                // Step 2.1: Load another ad
                AdRequest adRequest = new AdRequest.Builder()
                                        .addTestDevice(AdRequest.DEVICE_EMULATOR_ID)
                                        .build();
                mInterstitialAd.loadAd(adRequest);
    
                // Step 2.2: Start the new activity
                startActivity(new Intent(Activity1.this, Activity2.class));
            }
        });
    }
    // If it has not loaded due to any reason simply load the next activity
    else {
        startActivity(new Intent(Activity1.this, Activity2.class));
    }
    

    这样您也不必担心由于没有互联网连接或其他原因而无法加载广告。这段代码将按照您描述问题的方式处理一切。

    【讨论】:

    • 完美!感谢分享!
    • 控制活动状态的绝佳解决方案
    【解决方案2】:

    也许是这样的?使用onAdClosed函数启动activity

    interstitial.setAdListener(new AdListener() {
     public void onAdLoaded() {
      if (interstitial.isLoaded()) {
          interstitial.show();
       }
     }
         @Override
            public void onAdClosed() {
                 startActivity(new Intent(this, secondactivity.class ));    
                // Code to be executed when when the interstitial ad is closed.
                Log.i("Ads", "onAdClosed");
            } 
     });
    

    在此处阅读有关此内容的更多信息: https://developers.google.com/admob/android/interstitial

    【讨论】:

    • 它工作正常。非常感谢你,我非常感谢你。编辑此startActivity(new Intent(MainActivity.this, secondactivity.class ));; 后它工作了
    • 但是有一个问题。如果广告没有显示或用户没有互联网连接,那么什么都不会发生。如果广告未显示或用户没有互联网连接,则应该启动第二个活动,该怎么做?
    • 也许检查互联网连接,如果没有启动活动,如果有连接显示添加? developer.android.com/training/monitoring-device-state/…
    • 现在可以了。 @Override public void onAdFailedToLoad(int errorCode) { startActivity(new Intent(MainActivity.this, secondactivity.class )); // Code to be executed when an ad request fails. Log.i("Ads", "onAdFailedToLoad"); }developers.google.com/admob/android/interstitial
    • 对@Foodeveloper 的另一个很好的答案的一个警告:您不应该在 onAdLoaded 中显示插页式广告。最好响应按钮单击或其他一些 UI 事件来执行此操作。这样,广告会等待用户准备好,而不是相反。
    【解决方案3】:

    这是最新的 SDK。

    在应用启动时加载广告。

    要在用户转到其他活动之前展示广告,请使用此代码。如果您希望在点击次数后展示广告,您可以使用计数器。

    这样

    在应用启动时加载广告

       public InterstitialAd mInterstitialAd;
      private int counter = 0;
    
     AdRequest adRequest = new AdRequest.Builder().build();
    
        InterstitialAd.load(this, AD_UNIT_ID, adRequest, new InterstitialAdLoadCallback() {
            @Override
            public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                // The mInterstitialAd reference will be null until
                // an ad is loaded.
                super.onAdLoaded(interstitialAd);
                mInterstitialAd = interstitialAd;
    
            }
    
            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                // Handle the error
    
                mInterstitialAd = null;
            }
        });
    

    用这个来展示

    case R.id.button_id:
    
    if (counter == 1) {
                    if (mInterstitialAd != null) {
                        mInterstitialAd.show(MainActivity.this);
                        mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
                            @Override
                            public void onAdDismissedFullScreenContent() {
                                // Called when fullscreen content is dismissed.
    
                                startActivity(new Intent(Activity1.this, Activity2.class));
                            
                           }
    
                            @Override
                            public void onAdFailedToShowFullScreenContent(AdError adError) {
                                // Called when fullscreen content failed to show.
                                Log.d("TAG", "The ad failed to show.");
                            }
    
                        });
    
                    } else {
                //load add again as above and visit second activity
             `startActivity(new Intent(Activity1.this, Activity2.class));`
              counter=0;
                       
                  
                    }
    
                } else { 
    
          startActivity(new Intent(Activity1.this, Activity2.class));`
                  }
    

    【讨论】:

      【解决方案4】:

      此代码适用于我

      Intent intent = new Intent(getApplicationContext(),  MainActivity.class); 
      startActivity(intent); 
          if (mInterstitialAd.isLoaded()) {
              mInterstitialAd.show();
          }
      finish();
      

      【讨论】:

        【解决方案5】:
        package com.androidx.sharebd.fragment;
        
        import android.content.Context;
        import android.content.Intent;
        import android.os.Bundle;
        import android.util.Log;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.Button;
        
        import androidx.annotation.NonNull;
        import androidx.annotation.Nullable;
        
        import com.androidx.sharebd.R;
        import com.androidx.sharebd.activity.ConnectionManagerActivity;
        import com.androidx.sharebd.activity.ContentSharingActivity;
        import com.androidx.sharebd.model.TitleSupport;
        import com.genonbeta.android.framework.ui.callback.SnackbarSupport;
        import com.google.android.gms.ads.AdListener;
        import com.google.android.gms.ads.AdRequest;
        import com.google.android.gms.ads.InterstitialAd;
        
        public class HomeFragment
        extends com.genonbeta.android.framework.app.Fragment
        implements TitleSupport,
        SnackbarSupport,
        com.genonbeta.android.framework.app.FragmentImpl {
        
          @Nullable@Override
          public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        
            final View view = inflater.inflate(R.layout.fragment_home, container, false);
        
            Button actionReceive = (Button) view.findViewById(R.id.receive);
        
            actionReceive.setOnClickListener(new View.OnClickListener() {@Override
              public void onClick(View view) {
        
                /// Interstitial ads Start
        
                InterstitialAd mInterstitial = new InterstitialAd(getActivity());
                mInterstitial.setAdUnitId(getString(R.string.interstitial_ad_unit));
                mInterstitial.loadAd(new AdRequest.Builder().build());
                mInterstitial.setAdListener(new AdListener() {@Override
                  public void onAdLoaded() {
                    // TODO Auto-generated method stub
                    super.onAdLoaded();
                    if (mInterstitial.isLoaded()) {
                      mInterstitial.show();
                    }
                  }
        
                  @Override
                  public void onAdClosed() {
        
                    /// Your main code start ( where you want to go )
        
                    startActivity(new Intent(getContext(), ConnectionManagerActivity.class).putExtra(ConnectionManagerActivity.EXTRA_ACTIVITY_SUBTITLE, getString(R.string.text_receive)).putExtra(ConnectionManagerActivity.EXTRA_REQUEST_TYPE, ConnectionManagerActivity.RequestType.MAKE_ACQUAINTANCE.toString()));
        
                    /// Your main code end ( where you want to go )
        
                    Log.i("Ads", "onAdClosed");
                  }
        
                  @Override
                  public void onAdFailedToLoad(int errorCode) {
        
                    /// Your main code start ( where you want to go )
        
                    startActivity(new Intent(getContext(), ConnectionManagerActivity.class).putExtra(ConnectionManagerActivity.EXTRA_ACTIVITY_SUBTITLE, getString(R.string.text_receive)).putExtra(ConnectionManagerActivity.EXTRA_REQUEST_TYPE, ConnectionManagerActivity.RequestType.MAKE_ACQUAINTANCE.toString()));
        
                    /// Your main code end ( where you want to go )
        
                    Log.i("Ads", "onAdFailedToLoad");
                  }
        
                });
        
                /// Interstitial ads end
        
              }
            });
        
            Button actionSend = (Button) view.findViewById(R.id.send);
            actionSend.setOnClickListener(new View.OnClickListener() {@Override
              public void onClick(View view) {
        
                /// Interstitial ads Start
        
                InterstitialAd mInterstitial = new InterstitialAd(getActivity());
                mInterstitial.setAdUnitId(getString(R.string.interstitial_ad_unit));
                mInterstitial.loadAd(new AdRequest.Builder().build());
                mInterstitial.setAdListener(new AdListener() {@Override
                  public void onAdLoaded() {
                    // TODO Auto-generated method stub
                    super.onAdLoaded();
                    if (mInterstitial.isLoaded()) {
                      mInterstitial.show();
                    }
                  }
        
                  @Override
                  public void onAdClosed() {
        
                    /// Your main code start ( where you want to go )
                    startActivity(new Intent(getContext(), ContentSharingActivity.class));
        
                    /// Your main code End ( where you want to go )
        
                    Log.i("Ads", "onAdClosed");
                  }
        
                  @Override
                  public void onAdFailedToLoad(int errorCode) {
                    startActivity(new Intent(getContext(), ContentSharingActivity.class));
                    Log.i("Ads", "onAdFailedToLoad");
                  }
        
                });
        
                /// Interstitial ads End
        
              }
            });
        
            return view;
          }
        
          @Override
          public CharSequence getTitle(Context context) {
            return context.getString(R.string.text_home);
          }
        
        }
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多