离线插页式广告拦截器应用程序功能
Interestitial Ads blocks app function in offline
我的应用有两个广告:
- 横幅
- 插页式。
当我打开我的应用程序时,有趣的广告首先出现(当数据打开时)。当(数据关闭)应用程序无法正常运行时,如按钮点击等。只有当广告完成显示我的应用程序才能运行,否则它将无法离线运行。
我想 运行 我的应用程序处于离线状态,即使广告没有显示,我的应用程序也应该可以运行。
希望你能帮助我,这个问题对其他人也有帮助
我的项目
MainActivity.Java
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private InterstitialAd interstitial;
private AdView mAdView;
Button xxxx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//GOOGLE ADMOB FIREBASE ADS //
//Interstitial//
AdRequest adRequest2 = new AdRequest.Builder().build();
interstitial = new InterstitialAd(MainActivity.this);
interstitial.setAdUnitId("ca-app-pub-8736194125011489/4511020459");
interstitial.loadAd(adRequest2);
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
displayInterstitial();
}
});
}
private void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
}
//Banner Ad//
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest1 = new AdRequest.Builder().build();
mAdView.loadAd(adRequest1);
//button//
xxxx = (Button)findViewById(R.id.xxxx);
xxxx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent xxxx = new Intent(MainActivity.this, xxxx.class);
startActivity(xxxx);
}
});
清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jobyreuben.yyyyyyyyy">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SplashScreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"/>
<activity
android:name=".xxxx"
android:configChanges="orientation"
android:screenOrientation="portrait" />
</application>
</manifest>
试试放
xxxx = (Button)findViewById(R.id.xxxx);
在 AdRequest adRequest2 = new AdRequest.Builder().build();
之前
根据您的代码,您在 displayInterstitial
方法中向按钮添加侦听器,该方法仅在 onAdLoaded()
回调方法加载 interstitialAd 时调用,因此您首先在屏幕上看到广告,然后按钮才起作用您关闭插页式广告。
并且在柜台侧,当互联网关闭时,interstitialAd 未加载,因此 onAdLoaded()
-> displayInterstitial()
未被调用,并且没有向您的按钮添加侦听器。
AndroidManifest.xml
在应用程序标签内添加广告Activity,如果要使用插页式广告
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
主要Activity
private InterstitialAd interstitial;
private AdView mAdView;
Button xxxx;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xxxx = (Button)findViewById(R.id.xxxx);
xxxx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent xxxx = new Intent(MainActivity.this, xxxx.class);
startActivity(xxxx);
}
});
mAdView = (AdView) findViewById(R.id.adView);
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR); // for testing only
mAdView.loadAd(adRequestBuilder.build());
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId("ca-app-pub-8736194125011489/4511020459");
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {}
@Override
public void onAdClosed() {
loadIntersitialAd();
}
});
loadIntersitialAd();
}
private void loadIntersitialAd(){
AdRequest interstitialRequest = new AdRequest.Builder().build();
interstitial.loadAd(interstitialRequest);
}
public void displayInterstitial() {
if (interstitial.isLoaded()) interstitial.show();
}
public boolean isInterstitialLoaded(){
return interstitial.isLoaded();
}
@Override
protected void onResume() {
super.onResume();
mAdView.resume();
}
@Override
protected void onPause() {
super.onPause();
mAdView.pause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mAdView.destroy();
}
}
每当您想显示广告调用时 displayInterstitial()
。
编辑
如果您想在广告加载后立即显示插页式广告,请从 onAdLoaded()
调用 displayInterstitial()
但这不是理想的方式,加载广告需要一些时间,因此您的广告之间会有一些延迟Activity 出现在前台和插页式广告展示中。
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
displayInterstitial();
}
@Override
public void onAdClosed() {
loadIntersitialAd();
}
});
编辑 2
当您从 onAdLoaded()
回调方法调用 displayInterstitial()
时,不要从 onAdClosed()
加载 loadIntersitialAd()
,因为它会创建递归循环。
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
displayInterstitial();
}
@Override
public void onAdClosed() {
}
});
我的应用有两个广告:
- 横幅
- 插页式。
当我打开我的应用程序时,有趣的广告首先出现(当数据打开时)。当(数据关闭)应用程序无法正常运行时,如按钮点击等。只有当广告完成显示我的应用程序才能运行,否则它将无法离线运行。
我想 运行 我的应用程序处于离线状态,即使广告没有显示,我的应用程序也应该可以运行。 希望你能帮助我,这个问题对其他人也有帮助
我的项目
MainActivity.Java
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private InterstitialAd interstitial;
private AdView mAdView;
Button xxxx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//GOOGLE ADMOB FIREBASE ADS //
//Interstitial//
AdRequest adRequest2 = new AdRequest.Builder().build();
interstitial = new InterstitialAd(MainActivity.this);
interstitial.setAdUnitId("ca-app-pub-8736194125011489/4511020459");
interstitial.loadAd(adRequest2);
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
displayInterstitial();
}
});
}
private void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
}
//Banner Ad//
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest1 = new AdRequest.Builder().build();
mAdView.loadAd(adRequest1);
//button//
xxxx = (Button)findViewById(R.id.xxxx);
xxxx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent xxxx = new Intent(MainActivity.this, xxxx.class);
startActivity(xxxx);
}
});
清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jobyreuben.yyyyyyyyy">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SplashScreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"/>
<activity
android:name=".xxxx"
android:configChanges="orientation"
android:screenOrientation="portrait" />
</application>
</manifest>
试试放
xxxx = (Button)findViewById(R.id.xxxx);
在 AdRequest adRequest2 = new AdRequest.Builder().build();
根据您的代码,您在 displayInterstitial
方法中向按钮添加侦听器,该方法仅在 onAdLoaded()
回调方法加载 interstitialAd 时调用,因此您首先在屏幕上看到广告,然后按钮才起作用您关闭插页式广告。
并且在柜台侧,当互联网关闭时,interstitialAd 未加载,因此 onAdLoaded()
-> displayInterstitial()
未被调用,并且没有向您的按钮添加侦听器。
AndroidManifest.xml
在应用程序标签内添加广告Activity,如果要使用插页式广告
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
主要Activity
private InterstitialAd interstitial; private AdView mAdView; Button xxxx; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); xxxx = (Button)findViewById(R.id.xxxx); xxxx.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent xxxx = new Intent(MainActivity.this, xxxx.class); startActivity(xxxx); } }); mAdView = (AdView) findViewById(R.id.adView); AdRequest.Builder adRequestBuilder = new AdRequest.Builder(); adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR); // for testing only mAdView.loadAd(adRequestBuilder.build()); interstitial = new InterstitialAd(this); interstitial.setAdUnitId("ca-app-pub-8736194125011489/4511020459"); interstitial.setAdListener(new AdListener() { @Override public void onAdLoaded() {} @Override public void onAdClosed() { loadIntersitialAd(); } }); loadIntersitialAd(); } private void loadIntersitialAd(){ AdRequest interstitialRequest = new AdRequest.Builder().build(); interstitial.loadAd(interstitialRequest); } public void displayInterstitial() { if (interstitial.isLoaded()) interstitial.show(); } public boolean isInterstitialLoaded(){ return interstitial.isLoaded(); } @Override protected void onResume() { super.onResume(); mAdView.resume(); } @Override protected void onPause() { super.onPause(); mAdView.pause(); } @Override protected void onDestroy() { super.onDestroy(); mAdView.destroy(); } }
每当您想显示广告调用时 displayInterstitial()
。
编辑
如果您想在广告加载后立即显示插页式广告,请从 onAdLoaded()
调用 displayInterstitial()
但这不是理想的方式,加载广告需要一些时间,因此您的广告之间会有一些延迟Activity 出现在前台和插页式广告展示中。
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
displayInterstitial();
}
@Override
public void onAdClosed() {
loadIntersitialAd();
}
});
编辑 2
当您从 onAdLoaded()
回调方法调用 displayInterstitial()
时,不要从 onAdClosed()
加载 loadIntersitialAd()
,因为它会创建递归循环。
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
displayInterstitial();
}
@Override
public void onAdClosed() {
}
});