【发布时间】:2014-03-03 11:42:50
【问题描述】:
我想确保可以使用 Android AdMob SDK 关闭 Android 上的插页式广告。 经过一些研究,在我看来这是不可能的,因为广告是一项单独的活动。 我想做的是在 5 秒后关闭广告。 有人可以向我保证关闭插页式广告是不可能的,或者是否存在黑客攻击?
【问题讨论】:
标签: android admob ads interstitial
我想确保可以使用 Android AdMob SDK 关闭 Android 上的插页式广告。 经过一些研究,在我看来这是不可能的,因为广告是一项单独的活动。 我想做的是在 5 秒后关闭广告。 有人可以向我保证关闭插页式广告是不可能的,或者是否存在黑客攻击?
【问题讨论】:
标签: android admob ads interstitial
这将是一个很晚的答案,但我遇到了类似的问题。一个技巧就是以编程方式调用后退按钮事件。
this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
每当您按下后退按钮时,插页式广告就会关闭,因此触发后退按钮事件最终会关闭插页式广告。休息视需求而定。
【讨论】:
您可以通过实现ActivityLifecycleCallbacks 来获取 Admob 插页式活动的引用并在要关闭它时调用 finish():
private final Application.ActivityLifecycleCallbacks activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
Log.e(TAG, "onActivityCreated: " + activity.getClass());
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
Log.e(TAG, "onActivityStarted: " + activity.getClass());
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
Log.e(TAG, "onActivityResumed: " + activity.getClass());
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
Log.e(TAG, "onActivityPaused: " + activity.getClass());
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
Log.e(TAG, "onActivityStopped: " + activity.getClass());
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
Log.e(TAG, "onActivitySaveInstanceState: " + activity.getClass());
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
Log.e(TAG, "onActivityDestroyed: " + activity.getClass());
}
};
MyApplication.getInstance().registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
E/TAG: onActivityCreated: class com.google.android.gms.ads.AdActivity
E/TAG: onActivityStarted: class com.google.android.gms.ads.AdActivity
E/TAG: onActivityResumed: class com.google.android.gms.ads.AdActivity
【讨论】:
无法以编程方式关闭插页式广告。
【讨论】:
对于新读者。 使用:
Intent intent = new Intent(activity, activity.getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
activity.startActivity(intent);
@Override
public void onAdOpened() {
// Code to be executed when the ad is displayed.
Log.d("mInterstitialAd", "onAdOpened ");
fullscreenAdShowing = true;
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
if(!fullscreenAdShowing){
return;
}
Log.d("mInterstitialAd", "onAdOpened Handler 5 seconds run");
Intent intent = new Intent(activity, activity.getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
activity.startActivity(intent);
}
}, 5000);
}
@Override
public void onAdClosed() {
// Code to be executed when when the interstitial ad is closed.
Log.d("mInterstitialAd", "onAdClosed loadAd");
fullscreenAdShowing = false;
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
【讨论】: