Search code examples
javaandroidadmobrewardedvideoad

Show a progress Bar when Rewarded video Ads is loading


I want to use Rewarded video ads (Admob) but I want to show a progress bar while the video ads is loading
I already try to did it with async task just to see if the video will load but it didn't work

     @SuppressLint("StaticFieldLeak")
    public class videoAd extends AsyncTask<Void, Void, Void> {

        @Override
        protected void doInBackground(Void... voids) {

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
                }
            });
        }

        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
            if (mRewardedVideoAd.isLoaded()){

                Toast.makeText(SetFullWallpaper.this, "Video loaded", Toast.LENGTH_SHORT).show();
                mRewardedVideoAd.show();
            }
        }
    }

Now I want to load a progress bar if the video is not loaded yet
Thank you


Solution

  • This is how I did it:

    I had a button, which when clicked showed the ad, so I had a boolean variable which tracked whether the button has been clicked:

    boolean buttonClicked = false
    

    These lines were in my onCreate function:

        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(getContext());
        rewardedVideoAdListener = new RewardedVideoAdListener() {
            @Override
            public void onRewardedVideoAdLoaded() {
                if(buttonClicked) {
                    showAd();
                }
            }
    
            @Override
            public void onRewardedVideoAdOpened() {
    
            }
    
            @Override
            public void onRewardedVideoStarted() {
    
            }
    
            @Override
            public void onRewardedVideoAdClosed() {
                loadRewardedVideoAd();
            }
    
            @Override
            public void onRewarded(RewardItem rewardItem) {
    
            }
    
            @Override
            public void onRewardedVideoAdLeftApplication() {
    
            }
    
            @Override
            public void onRewardedVideoAdFailedToLoad(int i) {
                if(buttonClicked) {
                    progressBar.setVisibility(View.INVISIBLE);
                    Toast toast = Toast.makeText(getContext(), "Please try again later", Toast.LENGTH_SHORT);
                    toast.show();
                }
            }
    
            @Override
            public void onRewardedVideoCompleted() {
    
            }
        };
    
        mRewardedVideoAd.setRewardedVideoAdListener(rewardedVideoAdListener);
    
        loadRewardedVideoAd();
    
        pointsButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showAd();
                }
            });
    

    This was my showAd function:

    public void showAd(){
        if (mRewardedVideoAd.isLoaded()) {
            progressBar.setVisibility(View.GONE);
            mRewardedVideoAd.show();
            buttonClicked = false;
        } else {
            loadRewardedVideoAd();
            progressBar.setVisibility(View.VISIBLE);
            buttonClicked = true;
        }
    }
    

    How this works is, the app tries to load the ad in the background by calling the loadRewaredVideoAd() function when the activity/fragment is created. Then when the user clicks the button,showAd() function is called and one of two things happen:

    • 1) If the ad was successfully loaded, it shows the ad.
    • 2) If not, it calls loadRewardedVideoAd() again and shows a progressbar this time. It also sets buttonClicked to true. Then if the ad loads, the onRewardedVideoAdLoaded() function is called which calls showAd() again and this time the 1st option happens. If the ad didn't load this time as well, then onRewardedVideoAdFailedToLoad(int i)is called and it shows a toast saying the user to try again later.