Android 如何随时加载Admob广告';有可能吗?
仅当在应用程序启动之前启用了WI-FI时,广告才会显示(如果在应用程序会话期间启用了WI-FI,则不会显示广告)。如何尽可能加载Admob广告?我相信,这和AdListener有关。 我当前的代码:Android 如何随时加载Admob广告';有可能吗?,android,admob,Android,Admob,仅当在应用程序启动之前启用了WI-FI时,广告才会显示(如果在应用程序会话期间启用了WI-FI,则不会显示广告)。如何尽可能加载Admob广告?我相信,这和AdListener有关。 我当前的代码: adView.setAdListener(new AdListener() { @Override public void onAdLoaded() { adView.setVisibility(View.VISIBLE);
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上运行良好。搜索后,我发现在这个帖子上,有人已经问了类似的问题,被接受的答案与我在这里给出的答案非常相似,所以我不明白为什么投反对票,请有人澄清。我想有人投了反对票,因为这是一个老问题。当应用程序运行时,网络连接打开/关闭时,广告可见性不会改变。它只在应用程序启动时进行检查。。当网络连接改变时,当用户在应用程序中时,如何改变广告的可见性。。