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: