Android 如何随时加载Admob广告';有可能吗?

Android 如何随时加载Admob广告';有可能吗?,android,admob,Android,Admob,仅当在应用程序启动之前启用了WI-FI时,广告才会显示(如果在应用程序会话期间启用了WI-FI,则不会显示广告)。如何尽可能加载Admob广告?我相信,这和AdListener有关。 我当前的代码: adView.setAdListener(new AdListener() { @Override public void onAdLoaded() { adView.setVisibility(View.VISIBLE);

仅当在应用程序启动之前启用了WI-FI时,广告才会显示(如果在应用程序会话期间启用了WI-FI,则不会显示广告)。如何尽可能加载Admob广告?我相信,这和AdListener有关。 我当前的代码:

   adView.setAdListener(new AdListener() {
       @Override
       public void onAdLoaded() {
           adView.setVisibility(View.VISIBLE);
           super.onAdLoaded();
       }

       public void onAdFailedToLoad(int errorCode) {
           adView.setVisibility(View.GONE);
       }
   });

如果您想知道,我是否应该加载广告,取决于广告所需的条件是否满足,如互联网和
谷歌游戏服务
,那么您可以使用以下方法:

public static boolean shouldLoadAd(Context context) {
        return (GooglePlayServicesUtil.isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS && isNetworkAvailable(context));
    }

public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

该方法应加载广告检查internet和Google PlayServices是否可用,然后加载广告,否则不加载广告,如果返回false,则可以隐藏广告视图。

您需要一个广播接收器来了解网络状态何时发生了变化,以便加载添加内容

public class NetworkChangeReceiver extends BroadcastReceiver {

public static final int TYPE_WIFI = 1;
public static final int TYPE_MOBILE = 2;
public static final int TYPE_NOT_CONNECTED = 0;
public static final int NETWORK_STATUS_NOT_CONNECTED = 0;
public static final int NETWORK_STATUS_WIFI = 1;
public static final int NETWORK_STATUS_MOBILE = 2;

@Override
public void onReceive(Context context, Intent intent) {
    int status = getConnectivityStatusString(context);

    if ("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) {
        if (status == NETWORK_STATUS_NOT_CONNECTED) {
            Log.i("Receiver","not connected");

        } else {
            Log.i("Receiver","connected");
            //If the connectivity changes while using the app and it is connected to a network you can load your adds.
            AddListener.initialiseAds(mAdView, adRequest);
        }
    }
}

public int getConnectivityStatusString(Context context) {
    int conn = getConnectivityStatus(context);
    int status = 0;
    if (conn == TYPE_WIFI ) {
        status = NETWORK_STATUS_WIFI;
    } else if (conn == TYPE_MOBILE ) {
        status = NETWORK_STATUS_MOBILE;
    } else if (conn == TYPE_NOT_CONNECTED) {
        status = NETWORK_STATUS_NOT_CONNECTED;
    }
    return status;
}

public int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            return TYPE_WIFI;

        if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            return TYPE_MOBILE;
    }
    return TYPE_NOT_CONNECTED;
}}
然后我们有了AddListener类

public final class AddListener {

private AddListener(){
}

public static void initialiseAds(final AdView mAdView, AdRequest adRequest) {
    mAdView.loadAd(adRequest);
    mAdView.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            super.onAdLoaded();
            if (mAdView.getVisibility() == View.GONE) {
                mAdView.setVisibility(View.VISIBLE);
            }
            Log.i("Receiver","Add loaded");
            // Code to be executed when an ad finishes loading.
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            super.onAdFailedToLoad(errorCode);
            mAdView.setVisibility(View.GONE);
            Log.i("Receiver","Add error "+errorCode);
            // Code to be executed when an ad request fails.
        }

        @Override
        public void onAdOpened() {
            Log.i("Receiver","Add opened");
            // Code to be executed when an ad opens an overlay that
            // covers the screen.
        }

        @Override
        public void onAdLeftApplication() {
            Log.i("Receiver","Add left app");
            // Code to be executed when the user has left the app.
        }

        @Override
        public void onAdClosed() {
            Log.i("Receiver","Add closed");
            // Code to be executed when when the user is about to return
            // to the app after tapping on an ad.
        }
    });
}}
在MainUI类中,我们执行以下操作:

public class MainUI extends AppCompatActivity {

...
public static AdView mAdView;
public static AdRequest adRequest;
...

@Override
protected void onDestroy() {

    if (mAdView != null) {
        mAdView.destroy();
    }
    super.onDestroy();
}


@Override
protected void onResume() {
    super.onResume();
    if(mAdView!=null){  // Check if Adview is not null in case of fist time load.
        mAdView.resume();}
}

@Override
protected void onPause() {
    if (mAdView != null) {
        mAdView.pause();
        Log.i("pause","pause view");
    }
    super.onPause();
}



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_ui);

    MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
    mAdView = (AdView) findViewById(R.id.adView);
    mAdView.setVisibility(View.GONE);
    adRequest = new AdRequest.
            Builder()
            .addTestDevice("DDF43F508E61CBB2ACA96D879C66AB42")
            .build();
    AddListener.initialiseAds(mAdView,adRequest);

    ...} }
还记得在清单中注册你的广播接收者

<receiver
        android:name=".utils.NetworkTools.NetworkChangeReceiver"
        android:label="NetworkChangeReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>
    </receiver>

并请求以下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


请查看此链接,希望它对您有所帮助。。[Admob][1][1]:我希望你能告诉我为什么投反对票,我这样做了,它在我的appAfter上运行良好。搜索后,我发现在这个帖子上,有人已经问了类似的问题,被接受的答案与我在这里给出的答案非常相似,所以我不明白为什么投反对票,请有人澄清。我想有人投了反对票,因为这是一个老问题。当应用程序运行时,网络连接打开/关闭时,广告可见性不会改变。它只在应用程序启动时进行检查。。当网络连接改变时,当用户在应用程序中时,如何改变广告的可见性。。