Programmatically close an interstitial ad

It is not possible to programatically close an interstitial ad.


You can get a reference of the Admob Interstitial activity and call finish() on it when you want to close it, by implementing ActivityLifecycleCallbacks:

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

It's going to be a very late answer but I faced similar issue. A trick can be to call the back button event programmatically.

this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));

As whenever you press on back button the interstitial ad is closed so firing the back button event will eventually close the interstitial ad. Rest depends on the requirement.